我有一个使用字符串初始化字符指针的例子.我得到了一些行为在一种情况下有效,但在另一种情况下无效.我将用3个代码示例来解释:
first代码是这样的:
#include <stdio.h>
int main(void) {
char* f = "test";
printf("%s", f);//prints "test"
}
这段代码工作正常,包含它的目的是表明我们可以用字符串初始化一个字符指针并将其打印出来.
second代码是这样的:
#include <stdio.h>
void strcpy(char* dst, char* src) {
int i = 0;
do {
*(dst + i) = *(src + i);
} while (*(src + (i++)));
}
int main(void) {
char first[] = "test2";
char second[] = "test3";
strcpy(second, first);
printf("%s", second); //prints "test2"
}
这个代码也很好用.包含它的关键是因为下一行代码将无法工作.
third代码是这样的:
#include <stdio.h>
void strcpy(char* dst, char* src) {
int i = 0;
do {
*(dst + i) = *(src + i);
} while (*(src + (i++)));
}
int main(void) {
char first[] = "test4";
char *second = "test5"; //ONLY THIS LINE IS CHANGED
strcpy(second, first);
printf("%s", second); //PRINTS NOTHING
}
你知道为什么第三个代码什么都不打印吗?它只是第一个和第二个样本的组合,所以我不明白为什么它不工作?