说我有这个代码
char *string = "";
string += 'A';
string += 'B';
string += 'C';
printf("&s\n", string);
它只打印一个空行。为什么这样做,并且如果我不知道它将用多长时间,是否有一种简单的方法来连接从空字符串开始的单个字符?
在这样的语句中
string += 'A';
使用了指针算法。字符'A'的内部表示的值被添加到指针string
的值中,结果该指针具有无效值,因为它没有指向实际对象。
例如,您需要声明一个字符数组
char string[4] = "";
然后您可以将数组的各个元素设置为字符文字,例如,
int i = 0'
string[i++] = 'A';
string[i++] = 'B';
string[i++] = 'C';
string[i] = '\0';
printf("%s\n", string);
也有电话打错字
printf("&s\n", string);
string
只是指向字符串文字""
的指针,因此,当在char
上添加+
时,实际上只是在移动指针而不是连接到字符串。在C中,您可以分配足够大的字符串,然后使用strcat
向其中添加字符串:
char string[100] = "";
strcat(string, "A");
strcat(string, "B");
strcat(string, "C");
printf("%s\n", string);
如果要使用字符,则可以先convert the char to a string。
string += 'A';
确实not在字符串后附加一个字符,它使char
指针string
的值增加'A'
的值,在使用ASCII的系统上,该值[65]并使string
指向正确""
字符串文字的末尾。因此,此代码具有未定义的行为。
[printf("&s\n", string);
应打印&s
和换行符。
假设您在问题中输入了错误的代码,printf("%s\n", string);
将具有未定义的行为,并且可能会打印出空行以及崩溃或任何其他令人讨厌的副作用。