【问题标题】:Segmentation Fault in C. Trying to concatenate the command line argumentsC 中的分段错误。尝试连接命令行参数
【发布时间】:2014-10-08 05:00:45
【问题描述】:

我正在尝试将命令行参数连接成一个字符串。我最初使用字符类型的指针来声明字符串。

char *str;
    strcpy(str, argv[1]);
    int i = 2;
    while(i < argc) {
        realloc(str, sizeof(str) + sizeof(argv[i]) + 1);
        str = strcat(str,argv[i]);
        i+=1;
    }
printf("%s", str);
free(str);

如您所见,我正在重新分配内存块以连接新字符串。但我得到分段错误:11

【问题讨论】:

  • sizeof(str) 并没有按照你的想法去做。它通常是 8 或 4,具体取决于您的平台。 sizeof(argv[i]) 是一回事。
  • 除此之外,您的第一个 strcpy()(在循环之前)已经尝试使用未初始化的指针复制数据。

标签: c segmentation-fault strcat


【解决方案1】:
char *str;

这只是创建一个指针。您通常可以使用指针指向内存位置,但您不能将数据复制到指针,因为它本身没有存储内存。

您首先必须分配内存:

str = (char *)malloc (sizeof(argv[1]) * sizeof(char));

或者你可以分配一个char缓冲区,然后strcpy:

char str[MAX_STR_LENGTH] = {0};
strcpy (str, argv[1]);

在第二种情况下,str 也是指向 str[0] 的指针,因此是 str char 缓冲区的第一个元素。

【讨论】:

    【解决方案2】:
    char *str;
    

    strcpy之前没有为上述char指针分配内存。使用malloc/calloc分配内存。

    您也不能使用sizeof,因为sizeof 任何指针都是84 字节,具体取决于平台。

    也适用于sizeof(argv[i]) + 1。我认为应该是strlen(argv[i]) + 1

    【讨论】:

      猜你喜欢
      • 2020-11-25
      • 2014-05-29
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多