1

请使用 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;
}
4

4 回答 4

1

您不会 0 终止scat. 您可以添加:

p[ptr] = 0;

就在回来之前。

于 2013-01-10T19:41:23.967 回答
1

第二个循环没有效果:

while(t[temp]='\0') { // <<== Assignment!!!
    p[ptr++]=t[temp++];
}

这应该是!=not =,或者更好的是,您可以完全删除零:

while(t[temp]) { // Zero-checking is implicit in C
    p[ptr++] = t[temp++];
}

由于您不是写信给sor t,因此声明它们可能是个好主意const。这将在while上面的循环中捕获分配。

于 2013-01-10T19:42:42.773 回答
0
  1. 请使用 gcc 在您的机器上运行它,并判断它是否给您一个分段错误输出。
  2. 我认为程序没有任何问题。

我不遵循你的推理。如果程序在您的系统上出现段错误,那么可能是程序有问题。

仅供参考,这是 GCC(*) 输出的内容。它甚至不编译。

注意:它实际上是 g++,但它不应该有太大的不同。

于 2013-01-10T19:46:22.050 回答
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;
}
于 2013-01-10T19:52:37.160 回答