6
   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: そのようなファイルまたはディレクトリはありません。

4

2 に答える 2

6
        char *temp;
        strcpy(longest, temp);

strcpyありstrcpy(dst, src)ませんstrcpy(src, dst)。ソースは左側のパラメーターではなく、右側のパラメーターです。

さらにchar *temp、その値を に渡すときに初期化されませんstrcpytempたとえば、次を使用して、コピーする文字列を保持するためにメモリを割り当てる必要がありますmalloc

于 2013-04-13T00:41:51.140 に答える
1

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);

于 2019-06-08T03:18:06.103 に答える