我正在尝试编写字符串连接代码。我想知道它有什么问题。你能不能帮帮我吧这是我的代码。
#include <stdlib.h>
void strcat1(char *s, char *t)
{
while(*s !='\0')
s++;
while((*s++=*t++)!= '\0')
{
}
}
int main()
{
char s[]= "hello";
char t[]= "world";
strcat1(s,t);
printf("%s", s);
return 0;
}
我在codepad.org上收到了这个输出:Disallowed system call: SYS_socketcal
这是链接:http://codepad.org/Arz6U7YA
编辑:主函数中的更改char * s =“Hello”和char * t =“World”是否会产生差异?
答案 0 :(得分:8)
s
有6个字符的空格(即'h','e','l','l','o'和'\ 0')。
你试图在那里写下5个以上的字符。
不要那样做!
尝试在
之前增加s
的尺寸
int main()
{
char s[11] = "hello";
/* ... */
编辑OP后编辑
将main中的s
更改为
char *s = "hello";
将s
从空间较小的数组更改为指向字符串文字的指针。
字符串文字不可修改,因此您不能指望您的代码能够使用更改。
答案 1 :(得分:3)
缓冲区溢出。您无法追加到数组s
的末尾,因为它只分配了6个字符(5个可打印和1个\0
)。
答案 2 :(得分:3)
嗯,最大的问题是s
不足以保持结果;它的大小可容纳6个字符(5个字母加上0个终结符),因此只要您开始尝试附加t
的内容,就会超出缓冲区。
答案 3 :(得分:-3)
您正尝试附加到常量字符串。该内存段受到保护。在那里创建一个新的缓冲区,然后返回它。