分段错误 - C错误中的字符串连接

时间:2015-11-16 10:57:24

标签: c

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

请帮助我理解我做错了什么。

3 个答案:

答案 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

过去char
Double