使用指针的strcat程序

时间:2013-01-10 19:40:04

标签: c

请使用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 个答案:

答案 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++];
}

由于您没有写信给st,因此将const声明为while可能是个好主意。这可能会在上面的{{1}}循环中捕获到该作业。

答案 2 :(得分:0)

  1. 请使用gcc在您的计算机上运行它,并告诉它是否为您提供了分段错误输出。
  2. 我认为该计划没有任何问题。
  3. 我不遵循你的推理。如果程序在您的系统上发生了段错误,那么该程序可能错误非常

    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;
}