Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 分割错误出来了?_C_String - Fatal编程技术网

C 分割错误出来了?

C 分割错误出来了?,c,string,C,String,我试图在不使用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

我试图在不使用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';
}
#包括
#包括
void xstrcat(char*,char*);
int main()
{
char source[]=“people”;
字符目标[30]=“你好”;
xstrcat(目标、源);
printf(“%s”,来源);
printf(“%s”,目标);
返回0;
}
void xstrcat(char*p,char*q)
{
int len=0;
len=strlen(q);
q=q+len;
而(*p!='\0')
{
*q=*p;
q++;
p++;
}
*q='\0';
}

实现中的一些错误:

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

while(*p!='/0')
必须是:

while(*p!='\0')
请注意斜杠\

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

同样,这个语句是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';
}

您正在覆盖内存

您正在连接到
,该源内存不足,无法容纳连接的字符

您可能需要反转
目标
的定义。 i、 e


调用
xstrcat
as
xstrcat(源、目标)

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

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


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

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

while(*p!='\0')
但是,您还试图将字符串添加到字符串文字中,这将导致未定义的行为。开关

xstrcat(target,source); 

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

*q='\0';

问题出在下面一行的代码中:

xstrcat(target,source);
应该是

xstrcat(source,target);

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

您应该将
源添加到
目标
,但似乎您正在以另一种方式进行。调试呢?你试过调试你的代码吗?您的代码包含一个明显的错误,调试会话会立即显示该错误。这不是一个“为我调试代码”的地方。另外,如果您不确定
q=q+len
表达式的有效性,您为什么要在我们的代码中使用它。这是你的密码吗?
xstrcat(source,target);