我正在尝试像这样的java等价物 str =“stuff”+ str;
我尝试使用sprintf(str,“stuff%s”,str);和str = strcat(“Stuff”,str); 这些都不起作用......我是否被迫使用第二个字符串来保存结果?
类似sprintf(str2,“stuff%s”,str)或str2 = strcat(“Stuff”,str);
答案 0 :(得分:0)
阅读文档。 strcat is
strcat(char* destination, const char* source);
会将source
追加到destination
。你的方式是倒退 - 由于"Stuff"
是const char*
,它会失败。
strcat(str, "Stuff");
应该有效,导致str
包含原始字符串,然后是Stuff
。
示例:
include <stdio.h>
#include <string.h>
int main(void) {
char string[256];
char s2[256];
strcpy(string, "hello ");
strcat(string, "world");
printf("The concatenated string is '%s'\n", string);
sprintf(string, "I say %s", string);
printf("The new string is '%s\n'", string);
strcpy(string, "hello world");
sprintf(s2, "I say %s", string);
printf("And now it is '%s'\n", s2);
}
结果
The concatenated string is 'hello world'
The new string is 'I say I say world
'And now it is 'I say hello world'
正如您所看到的,您需要将sprintf
的结果放在不同的字符串中,否则会覆盖(当编译器将string
读入格式字符串时,它会覆盖它已被覆盖......)
我认为没有办法创建字符串的副本来完成你的工作 - 预先设置字符串常量。有些语言会让你失望......
答案 1 :(得分:0)
实际上最好使用第二个字符串。
但是,如果你真的不想这样,你肯定有足够的分配空间进入你的变量。然后你可以做以下
strncpy(memmove(str + 6, str, strlen(str) + 1) - 6, "stuff ", 6); //+ 1 to copy the null character
或者
memmove(str + 6, str, strlen(str) + 1);
strncpy(str, "stuff ", 6);
即使此解决方案有效,我也不建议您使用它。它的可读性较差,而且 - 我认为 - 较慢。
如果您正在使用malloc并需要realloc。你没有问题,因为重新分配更大的内存块会产生一个新的未确定值。