c - C 中的段错误。尝试连接命令行参数

标签 c segmentation-fault strcat

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

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

最佳答案

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 缓冲区的第一个元素。

关于c - C 中的段错误。尝试连接命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26249485/

相关文章:

c++ - 文件无法打开,在调试器之外运行会导致段错误 (c++)

C 错误 : lvalue required as unary '&' operand

c - ljmp 和 setjmp 之间的内存泄漏

c - *char 数组末尾的段错误

c++ - 静态模板类的奇怪行为

matlab - imwrite 在 Matlab 中给出不一致的错误

c - strcat 不影响全局字符串

c - 为什么在这种情况下 strlen() 返回的数字比我预期的数字少 1?

c - 函数中的“静态”对象

c - c 程序从行读取并给出 : the numbers of numbers in the file and the other characters