我对C编程很新,并且仍然试图理解C的所有角落和缝隙。我正在编写一个程序来连接两个字符串。但我收到一个我不明白的错误。这是输出。
Asfakul
字符串名称的长度为7
字符串全名的长度为7
大号
分段错误(核心转储)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char const *argv[])
{
char *name="Asfakul";
char *surname="Laskar";
char *fullname;
int i=0;
//Allocate Memory of 100 char
fullname=(char*)malloc(100*sizeof(char));
fullname=name;
while(*name !='\0')
{
i++;
name++;
}
// Allocate Memory for FullName
//fullname=(char*)malloc(100*sizeof(char));
//Coppied the spurce String
// fullname=name; // Here this assignement will not work as Pointer name now point to NULL character of String Name.
puts(fullname);
printf("The Length of the String name is %d\n",i );
printf("The Length of the String fullname is %d\n",strlen(fullname) );
while(*surname !='\0')
{
printf("%c\n",*(fullname+i+1));
*(fullname+i+2)=*(surname);
printf("%c\n",*(surname));
i++;
surname++;
}
puts(fullname);
return 0;
}
请帮助我理解我做错了什么。
答案 0 :(得分:5)
fullname = name;
将指针name
指定给fullname
。您随后在name
修改数据。由于name
指向只读字符串文字,因此不允许这样做。
您还要丢弃malloc
指针,让您无法free
分配的内存!这不会很好。
您应该使用name
的深层副本:考虑使用strncpy
。
如果你使用const char*
作为字符串文字,那么编译就会失败,所以要保护自己免受这些事情的侵害。
答案 1 :(得分:0)
*(fullname+i+2)=*(surname);
在这里,你试图在名字的末尾加上姓氏:
char *name="Asfakul";
这是只读空间。
您应该为两个字符串分配足够的空间,并将它们复制到分配的空间内。
答案 2 :(得分:0)
您可以通过char
过去charDouble