这个程序有什么问题?

时间:2011-04-06 22:02:49

标签: c string

我正在尝试编写字符串连接代码。我想知道它有什么问题。你能不能帮帮我吧这是我的代码。

#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”是否会产生差异?

4 个答案:

答案 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)

您正尝试附加到常量字符串。该内存段受到保护。在那里创建一个新的缓冲区,然后返回它。

相关问题