我有一个我用C语言编写的程序,当我的代码到达这一行时:
strcat("md5 ", "blah");
我收到了EXC_BAD_ACCESS错误,我的应用崩溃了。据我所知,它没有任何问题,所以我认为一双新眼睛可以解决我的问题。有什么想法吗?
答案 0 :(得分:8)
您正在尝试修改常量字符串。 strcat
的第一个参数也是目标字符串,在您的情况下,它是一个常量字符串。你应该使用类似的东西:
char s[100];
strcpy(s, "md5 ");
strcat(s, "blah");
答案 1 :(得分:3)
在C中,你必须提供自己存放东西的空间。 “md5”只有4个字符的空间(+ nul终结符)。没有足够的空间在那里追加“等等”。
更重要的是,您无法修改字符串文字。它们通常是只读的。 所以,你必须:
E.g:
char result[9]; //the result here needs 8 characters + a nul terminator
strcpy(result,"md5 ");
strcat(result,"blah"
或者,例如
const char *a = "md5 ";
const char *b = "blah";
char *result = malloc(strlen(a) + strlen(b) + 1);
if(result == NULL) {
out of memory
return;
}
strcpy(result,a);
strcat(result,b);
答案 2 :(得分:1)
提供给strcat的第一个字符串需要是一个可写缓冲区,第二个字符串的空间足够超过其当前内容。这意味着你不能使用字符串文字作为strcat()的第一个参数!
答案 3 :(得分:1)
根据http://www.cplusplus.com/reference/clibrary/cstring/strcat/:
将源字符串的副本附加到目标字符串。目标中的终止空字符被源的第一个字符覆盖,并且新的空字符附加在由目标中的两个串联形成的新字符串的末尾。
由于你的第一个字符串是一个常量,你不知道它在内存中的位置,你不能使用它后面的内存。