我试图在不使用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';
}
答案 0 :(得分:3)
您的实施中出现了一些错误:
1 - 您正在访问随机内存。一旦你的字符串中没有/0
。
while(*p!='/0')
必须是:
while(*p!='\0')
请注意斜线 \ 。
2 - 尝试将*p
添加到*q
时,您将覆盖随机内存。您必须创建一个具有足够空间的新变量来存储它们。
另外,这句话是q = q + len;正确?我们可以在a中添加变量吗? 指针??
答案 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
。
您可能想要反转source
和target
的定义。
即。
char source[30] = "folks";
char *target = "hello";
或者
将xstrcat
称为xstrcat(source, target);
答案 4 :(得分:0)
问题在于以下代码中的代码:
xstrcat(target,source);
应该是
xstrcat(source,target);
或在xstrcat函数中,尝试将第一个参数视为目标,将第二个参数视为源。