1

由于下面的代码给出(分段错误)错误(在运行时),如何仅使用指针实现连接?

#include <stdio.h>
#include <string.h>
int main()
{
    char *s1="Front";
    char *s2="Back";
    char *s3=strcat(s1,s2);
    puts(s3);
    return 0;
}
4

5 回答 5

4

因为您正在尝试写入字符串文字。该行char *s1 = "Front";指向一个无法写入的字符串常量。

将其更改为char s1[20] = "Front";,它应该会像您预期的那样工作 - 只要您添加的字符不超过 14 个。

于 2013-07-13T22:58:50.490 回答
1

该代码给出了一个错误,因为连接s1s2要求分配的内存s1>= 两个字节数组的组合长度。strcat将尝试遍历未分配给 的内存s1,从而导致运行时错误。这将通过指针起作用的唯一方法是,如果您创建str3一个大小在编译时已知的 char 数组(或指向运行时动态分配的指针):

char s1[10] = "Front";
char *s2 = "Back";

char *s3 = strcat(s1, s2);
于 2013-07-13T23:02:24.547 回答
1

阅读内容strcat,记住文字字符串(例如"Front"and "Back")是不可修改的。

于 2013-07-13T22:58:31.300 回答
1

结果需要空间,如下所示:

#include <stdio.h>
#include <string.h>
int main()
{
    char *s1="Front";
    char *s2="Back";
    char s3[80];
    s3[0] = '\0';
    strcat(s3,s1);
    strcat(s3,s2);
    puts(s3);
    return 0;
}
于 2013-07-13T22:58:38.550 回答
0

你也可以这样做。虽然它并不比 strcat() 好,但它仅使用指针实现。

#include<stdio.h>
#define SIZE 20
void concat(char *,char *);

int main()
{
    char string1[SIZE]="\0",string2[SIZE]="\0";

    printf("Enter String 1:\n");
    gets(string1);
    printf("Enter String 2:\n");
    gets(string2);

    concat(string1,string2);

    return 0;
}
void concat(char *str1,char *str2)
{
    char *conc=str1;

    while(*str1!='\0')
        str1++;

    *str1=' ';
    ++str1;

    while(*str2!='\0')
    {
        *str1=*str2;
        str1++,str2++;
    }

    *str1='\0';
    printf("Concatenated String:\n");
    puts(conc);

}
于 2013-07-14T05:01:04.580 回答