CPSC 355: Tutorial 2
PhD Student
Fall 2017
SSH and More C
Connecting the Arm Server
For Linux/macOS users:
ssh arm.cpsc.uclagary.ca -lyour.username
For Windows users:
Last Day
#include <stdio.h> // Include functions from the standard I/O library
// Define the main function
int main(int argc, char *argv[]) // argc: number of arguments passed
// argv: array to (pointer to) argument text
{
printf("Hello World!\n"); // prints hello world
return 0; // returns 0 (error code 0 = no error)
}
#include <stdio.h>
int main(int argc, char *argv[])
{
char name[256];
int age;
printf("Please enter your name:\n");
scanf("%s", name);
printf("Please enter your age: \n");
scanf("%d", &age); // & is the "address of" operator
printf("Hello %s, you are %d years younger than I am\n", name, 27 - age);
}
Datatypes in C
Name | Size (bytes) | Range | Format String |
---|---|---|---|
char | 1 | [-127 to 128] | %c, %h |
short | 2 | [-32,768 to 32,767] | %hi |
int | 4 | [-2,147,483,648 to 2,147,483,647] | %d |
long | 8 | [very negative, to very postive] | %l |
float | 4 | It's complicated... | %f |
double | 8 | It's complicated... | %f |
We'll talk about unsigned types later on...
char is short for character, a string is a list or array of characters
Format strings are powerful but complicated.
Datatypes in C
#include <stdio.h> // Include functions from the standard I/O library
int main(int argc, char *argv[])
{
int v1 = 100;
char character = 'h'; // the single quotes are an ASCII character literal
char another_character = 10; //
int v2 = 'i';
// "Literals" are a sort of way of writing values in a different way
int v3 = 0xFEEDDAD; // Is a hexadecimal literal
int v4 = 0b10010011; // Is a binary literal (but this is not standard C!)
int v5 = 022222222; // an octal literal (notice the first 0).
// Floating point numbers
float x = 10.1f;
float d = 10.2d;
}
Try printing some of these...
Arrays
#include <stdio.h> // Include functions from the standard I/O library
int main(int argc, char *argv[])
{
int array[16]; // Make an array of 16 elements
int example = 123456;
// we can assign elements of the array
array[0] = 10;
printf("Array[0] = %d\n", array[0]);
// in a loop
for(int i = 0; i < 16; i++) {
array[i] = i;
}
for(int i = 0; i < 16; i++) {
printf("Array[%d] = %d\n", i, array[i]);
}
printf("Let's try something different...\n");
printf("Array[17] = %d?\n", array[17]);
array[17] = 0;
printf("example = %d\n", example);
}
Arrays
#include <stdio.h> // Include functions from the standard I/O library
int main(int argc, char *argv[])
{
int *array = calloc(16, sizeof(int)); // Make an array of 16 elements on the /heap/
int example = 123456;
// we can assign elements of the array
array[0] = 10;
printf("Array[0] = %d\n", array[0]);
// in a loop
for(int i = 0; i < 16; i++) {
array[i] = i;
}
for(int i = 0; i < 16; i++) {
printf("Array[%d] = %d\n", i, array[i]);
}
printf("Let's try something different...\n");
printf("Array[17] = %d?\n", array[17]);
array[17] = 0;
printf("example = %d\n", example);
free(array); // need to clean up memory we allocated on the heap
}
Strings?
#include <stdio.h> // Include functions from the standard I/O library
int main(int argc, char *argv[])
{
char message[8];
message[0] = 'H';
message[1] = 'e';
message[2] = 'l';
message[3] = 'l';
message[4] = 'o';
message[5] = '!';
message[6] = '\n';
message[7] = 0; // 0 means "end of string", it's the NULL character
puts(message); // Here's a new function puts or put string
}
A string of text is just a list of characters.
Strings
#include <stdio.h> // Include functions from the standard I/O library
int main(int argc, char *argv[])
{
char message[8];
message[0] = 72;
message[1] = 101;
message[2] = 108;
message[3] = 108;
message[4] = 110;
message[5] = 31;
message[6] = 10;
message[7] = 0;
puts(message);
}
A string of text is just a list of characters.
Strings
#include <stdio.h> // Include functions from the standard I/O library
int main(int argc, char *argv[])
{
char message[256], dest_buffer[256];
printf("Enter a word\n");
scanf("%s", message);
// strlen(str) returns the length of a string
printf("Your message %s, is %d characters long", message, strlen(message));
// strcmp compares two strings, returns 0 if they're identical
// "Hello" == message does not work in C
if(strcmp("Hello", message) == 0) {
printf("I see you're just starting comp sci.\n");
}
strcpy(dest_buffer, message);
dest_buffer[0] = 'X';
printf("This was your original message:\n%s\n", message);
printf("This is the copied message:\n%s\n", dest_buffer);
}
C has a bunch of functions to help manipulate strings.
Pointers
#include <stdio.h> // Include functions from the standard I/O library
int main(int argc, char *argv[])
{
int *pointer = NULL; // Set the pointer to point at 0;
int a_value = 100;
// Doing the following will crash your program
printf("Value at pointer = %d\n", *pointer); // * means "get value at pointer" here
// it's also known as dereferencing
// synonymous to pointer[0]
pointer = &a_value; // here, & means "get the address value of the variable"
// it's known as the reference operator
printf("Value at pointer = %d\n", *pointer);
printf("pointer[0] = %d\n", pointer[0]);
}
Pointers are variables, but they point to locations in memory.
getchar, putchar
#include <stdio.h> // Include functions from the standard I/O library
int main(int argc, char *argv[])
{
char c = 0;
do {
c=getchar(); // gets a character from the standard input
putchar (c); // puts a character on the console
} while (c != '.');
}
Next time
- Some simple ARMv8 assembly (if statements, loops)
- Debugging
CPSC 355: Tutorial 2
By Joshua Horacsek
CPSC 355: Tutorial 2
- 1,532