细分错误出来了吗?

时间:2012-07-09 05:57:48

标签: c string

我试图在不使用strcat的情况下连接2个字符串,但是我遇到了运行时错误。拜托,有人帮帮我...

此声明q=q+len;是否正确?我们可以将一个变量添加到指针??

#include<stdio.h>
#include<string.h>

void xstrcat(char*,char*);
int main()
{
    char source[]="folks";
    char target[30]="hello";
    xstrcat(target,source);
    printf("%s",source);
    printf("%s",target);
    return 0;
}

void xstrcat(char*p,char*q)
{
    int len=0;
    len=strlen(q);
    q=q+len;
    while(*p!='\0')
    {
        *q=*p;
        q++;
        p++;
    }
    *q='\0';
}

5 个答案:

答案 0 :(得分:3)

您的实施中出现了一些错误:

1 - 您正在访问随机内存。一旦你的字符串中没有/0

while(*p!='/0')

必须是:

while(*p!='\0')

请注意斜线 \

2 - 尝试将*p添加到*q时,您将覆盖随机内存。您必须创建一个具有足够空间的新变量来存储它们。

  

另外,这句话是q = q + len;正确?我们可以在a中添加变量吗?   指针??

是。 It's a pointer arithmetic expression.

答案 1 :(得分:1)

您正在将target作为函数调用中的第一个参数传递,但似乎该函数尝试使用第二个参数作为目标。所以,也许你只需要在函数调用中切换参数位置。

另一件事是你在转义空字符时使用斜杠而不是反斜杠。因此,将'/ 0'更改为'\ 0'。

关于向指针添加int:在函数中,指针算术的类型完全合法。

答案 2 :(得分:1)

有几件事情,首先,您需要检查\0而不是/0

while(*p!='\0')

但是,您也尝试将字符串添加到字符串文字中,这将导致未定义的行为。切换

xstrcat(target,source); 

xstrcat(source, target); 

最后,xstrcat中的最后一行应更改为

*q='\0';

答案 3 :(得分:0)

你正在覆盖记忆。

您正在连接到没有足够内存来保存连接字符的source

您可能想要反转sourcetarget的定义。 即。

char source[30] = "folks";
char *target = "hello";

或者

xstrcat称为xstrcat(source, target);

答案 4 :(得分:0)

问题在于以下代码中的代码:

xstrcat(target,source);

应该是

xstrcat(source,target);

或在xstrcat函数中,尝试将第一个参数视为目标,将第二个参数视为源。