如何将字符附加到char*
?
所以......
char* thingy = "test";
char* another = "hello world";
thingy += another[6];
printf("%s\n", thingy);
我不想输出:
testw
但是,我得到了这个输出
在地址%p
编辑:
感谢您的帮助:)
答案 0 :(得分:2)
C中没有字符串算术,所以你不能这样做。
然而,你可以使用strcat()
(只要这些角色有空间):
char thingy[256] = "Hello World";
strcat(thingy, "!");
// thingy is now "Hello World!"
虽然重要的是要注意你应该总是检查字符串长度,并在做这些事情时要小心。
如果您想添加单个字符而不是字符串,可以将该字符复制到字符串中:
char thingy[256] = "Hello World";
char dummy[] = "#";
dummy[0] = '!';
strcat(thingy, dummy);
// thingy is now "Hello World!"
或者以手动方式进行:
char thingy[256] = "Hello World";
unsigned int len = strlen(thingy);
thingy[len] = '!'; // Append character
thingy[len + 1] = '\0'; // Readd termination
// thingy is now "Hello World!"
答案 1 :(得分:0)
thingy
是*
的指针(char
),即字符串"test"
的第一个字符的地址。 thingy
上的算术会更改它指向的地址:
thingy += another[6];
这会将地址char
的{{1}}的整数值添加到another + 6
指向的地址。这超出了字符串thingy
的末尾,因而未定义的行为 - 只是您的程序具有字符串"test"
。
此外,"at address %p"
指向的字符串是常量,因此您无法附加到它。您可以将其设为数组,例如thingy
,然后执行char thingy[MAX_LENGTH_OF_THINGY] = "test";
之类的操作(注意需要NUL终止C字符串)。或者你可以完全创建一个新的字符串,例如thingy[4] = another[6]; thingy[5] = '\0';
足够的内存并将原始+附加字符复制到其中。
答案 2 :(得分:0)
在这种情况下,您唯一的选择是重新分配char *的内存,以便您可以获得更大的字符串。
首先,你需要原始字符串的长度,然后必须加1,因为strlen函数不包含空终止符:
char* thingy = "test";
char* another = "hello world";
int len = strlen(thingy);
char* thingy = realloc(thingy, (len + 2) * sizeof(char));
thingy[len] = another[6];
thingy[len +1] = '\0';
printf("%s\n", thingy);
但是,如果您有权访问C ++,更好的方法是使用std :: string对象:
std::string thingy = "test";
std::string another = "hello world";
thingy += another[6];
printf("%s\n", thingy.c_str());
由于字符串是容器,因此有很多方法可以解决问题:
thingy.push_back(another[6]);
thingy.append(another, 6, 1);
thingy.insert(thingy.end(), another[6]);
std字符串的另一个好处是它们可以为你处理空终止符,所以你不必担心它。
答案 3 :(得分:-1)
您追加的字符串不应该是文字。如果你有:
char thingy[10] = "test";
你可以:
int len = strlen(thingy);
thingy[len] = another[6];
thingy[len+1] = '\0';