2

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

另外,这个说法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';
}
4

5 回答 5

3

您的实施中的一些错误:

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

while(*p!='/0')

一定是:

while(*p!='\0')

注意斜线\

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

另外,这个语句是 q=q+len; 正确的?我们可以将变量添加到指针吗?

是的。这是一个指针算术表达式。

于 2012-07-09T06:00:06.940 回答
1

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

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

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

于 2012-07-09T06:03:35.633 回答
1

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

while(*p!='\0')

而且,您正在尝试将字符串添加到字符串文字中,这将导致未定义的行为。转变

xstrcat(target,source); 

xstrcat(source, target); 

最后,最后一行xstrcat应该改为

*q='\0';
于 2012-07-09T06:05:16.690 回答
0

你正在覆盖内存。

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

您可能想要颠倒source和的定义target。IE

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

或者

称为xstrcat_xstrcat(source, target);

于 2012-07-09T06:02:34.373 回答
0

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

xstrcat(target,source);

它应该是

xstrcat(source,target);

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

于 2012-07-09T06:13:19.047 回答