在strcpy上崩溃,不知道为什么?

时间:2013-04-13 00:41:04

标签: c string pointers segmentation-fault

   if (strlen(shortest) > strlen(longest)) {
            char *temp;
            strcpy(longest, temp);
            strcpy(shortest, longest);
            strcpy(temp, shortest);
     } 
 }

strcpy(longest, temp) - >导致我的程序崩溃。这是一个详细的崩溃报告(我已经包含了正确的头文件,所以它不是那样。编译器警告我使用未初始化的临时变量...):

  

编程接收信号SIGSEGV,分段故障   __strcpy_ssse3()at ../sysdeps/i386/i686/multiarch/strcpy-ssse3.S:85
  85 ../sysdeps/i386/i686/multiarch/strcpy-ssse3.S:没有这样的文件或目录。

2 个答案:

答案 0 :(得分:5)

        char *temp;
        strcpy(longest, temp);

strcpy strcpy(dst, src)不是strcpy(src, dst)。源是右边的参数,而不是左边的参数。

此外,char *temp在将其值传递给strcpy时未初始化。您需要为temp分配内存以保存您复制的字符串,例如使用malloc

答案 1 :(得分:0)

有2个错误。

  

1)您需要先为char * temp“分配”内存;

     

示例:

char *temp;
temp = malloc(4); // Allocate 4 character space. 
                  // Ensure to include #include <stdlib.h>2)
     

2)strcpy签名是strcpy(dest,src)。在您的代码中,这是strcpy(src,dest),这是错误的。

     

正确的例子:   strccpy(temp, longest);