由于下面的代码给出(分段错误)错误(在运行时),我该如何实现仅使用指针的串联?使用指针的字符串连接
#include <stdio.h>
#include <string.h>
int main()
{
char *s1="Front";
char *s2="Back";
char *s3=strcat(s1,s2);
puts(s3);
return 0;
}
由于下面的代码给出(分段错误)错误(在运行时),我该如何实现仅使用指针的串联?使用指针的字符串连接
#include <stdio.h>
#include <string.h>
int main()
{
char *s1="Front";
char *s2="Back";
char *s3=strcat(s1,s2);
puts(s3);
return 0;
}
因为你试图写一个字符串。行char *s1 = "Front";
指向一个不能写入的字符串常量。
将其更改为char s1[20] = "Front";
,它应该像您期望的那样工作 - 只要您添加的字符数不超过14个。
谢谢!得到它了! – chappa
阅读有关strcat
呢,牢记文字字符串(如"Front"
和"Back"
)不可修改。
+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;
}
该代码给出错误,因为连接s1
与s2
将要求s1
的分配内存大于两个字节数组的组合长度。 strcat
将尝试迭代未分配给s1
的内存,从而导致运行时错误。这将通过指针的唯一方法是,如果你让str3
一个字符数组,其中规模在编译时(或指向一个动态分配一个用于运行时)知道:
char s1[10] = "Front";
char *s2 = "Back";
char *s3 = strcat(s1, s2);
你能做到这也是。虽然它不比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);
}
什么是错误? – Femaref