请使用gcc在您的计算机上运行它,并告诉它是否也为您提供了分段错误输出。我不认为该计划有任何问题。我是C的初学者。所以帮助!!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *scat(char *,char *);
void main()
{
char *s="james";
char *t="bond";
char *w=scat(s,t);
printf("the con: %s\n", w);
free(w);
}
char *scat(char *s,char *t)
{
char *p=malloc(strlen(s)+strlen(t)+1);
int temp=0 , ptr=0;
while(s[temp]!='\0'){
p[ptr++]=s[temp++];
}
temp=0;
while(t[temp]='\0'){
p[ptr++]=t[temp++];
}
return p;
}
答案 0 :(得分:1)
您不会在scat
中终止字符串。你可以添加:
p[ptr] = 0;
回来之前。
答案 1 :(得分:1)
第二个循环无效:
while(t[temp]='\0') { // <<== Assignment!!!
p[ptr++]=t[temp++];
}
这应该是!=
而不是=
,或者更好,你可以完全删除零:
while(t[temp]) { // Zero-checking is implicit in C
p[ptr++] = t[temp++];
}
由于您没有写信给s
或t
,因此将const
声明为while
可能是个好主意。这可能会在上面的{{1}}循环中捕获到该作业。
答案 2 :(得分:0)
我不遵循你的推理。如果程序在您的系统上发生了段错误,那么该程序可能错误非常。
FYI this is what GCC(*) outputs.它甚至没有编译。
注意:实际上它是g ++,但它不应该产生太大的差别。
答案 3 :(得分:0)
无需模拟string.h中存在的函数:
#include <string.h>
char *scat(char *s,char *t)
{
char *p;
size_t len1, len2;
len1 = strlen(s);
len2 = strlen(t);
p=malloc(len1+len2+1);
if (!p) barf();
memcpy(p,s, len1);
memcpy(p+len1, t, len2+1);
return p;
}