无法将字符添加到分配给“”的char指针中

问题描述 投票:0回答:3

说我有这个代码

char *string = "";
string += 'A';
string += 'B';
string += 'C';
printf("&s\n", string);

它只打印一个空行。为什么这样做,并且如果我不知道它将用多长时间,是否有一种简单的方法来连接从空字符串开始的单个字符?

c pointers char append c-strings
3个回答
1
投票

在这样的语句中

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);

0
投票

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


0
投票

string += 'A';确实not在字符串后附加一个字符,它使char指针string的值增加'A'的值,在使用ASCII的系统上,该值[65]并使string指向正确""字符串文字的末尾。因此,此代码具有未定义的行为。

[printf("&s\n", string);应打印&s和换行符。

假设您在问题中输入了错误的代码,printf("%s\n", string);将具有未定义的行为,并且可能会打印出空行以及崩溃或任何其他令人讨厌的副作用。

© www.soinside.com 2019 - 2024. All rights reserved.