int main(){
int a[10] = {0};
for (int i = 0; i < 10; i++){
a[i] = i++;
printf("a[%d]: %d\n", i, a[i]);
}
puts("----");
for (int i = 0; i < 10; i++){
printf("a[%d]: %d\n", i, a[i]);
}
}
What is interesting (or disturbing) about the above code?
We have added the public tests for assignment 2. The office hours are Sun/Tue/Thu 8-11 PM at Hillhouse 17 Rm 111.
Lessons learned in program management, technology, and innovation at Healthcare.gov
void
strcpy2(char *dest, const char *src)
{
/* This line copies characters one at a time from *src to *dest. */
/* The postincrements increment the pointers (++ binds tighter than *) */
/* to get to the next locations on the next iteration through the loop. */
/* The loop terminates when *src == '\0' == 0. */
/* There is no loop body because there is nothing to do there. */
while(*dest++ = *src++);
}
Because C pointers act exactly like array names, you can also write
strcpy2 using explicit array indices. The result is longer but may be
more readable if you aren't a C fanatic.
char *
strcpy2a(char *dest, const char *src)
{
int i;
for(i = 0; src[i] != '\0'; i++) {
dest[i] = src[i];
}
/* note that the final null in src is not copied by the loop */
dest[i] = '\0';
return dest;
}
A similar operation to strcpy is strcat. The difference is that strcat
concatenates src on to the end of dest; so that if dest previously
pointed to "abc" and src to "def", dest will now point to
"abcdef". Like strcpy, strcat returns its first argument. A
no-return-value version of strcat is given below.
void
strcat2(char *dest, const char *src)
{
while(*dest) dest++;
while(*dest++ = *src++);
}
int
strlen(const char *s)
{
int i;
for(i = 0; *s; i++, s++);
return i;
}
Note issue of strlen tarpit.
int
strcmp(const char *s1, const char *s2)
{
while(*s1 && *s2 && *s1 == *s2) {
s1++;
s2++;
}
return *s1 - *s2;
Negative if s1 < s2, positive if s1 > s2, 0 if s1 == s2.
if(strcmp(s1, s2) == 0) or if(!strcmp(s1, s2))
char *
strdup(const char *s)
{
char *s2;
s2 = malloc(strlen(s)+1);
if(s2 != 0) {
strcpy(s2, s);
}
return s2;
}
int *pointerToInt; double *pointerToDouble; char *pointerToChar; char **pointerToPointerToChar;
int n; /* an int variable */ int *p; /* a pointer to an int */ p = &n; /* p now points to n */