-1

n文字列の最初の( n <= strlen(src)) 文字 を返す関数を作成しています。

char* substring(char *src, int n)
{
   char *substr;
   int i;
   for (i = 0; i < n; i++)
     *substr++ = *src++;
   src = src - n;
   *substr = '\0';
   return substr - n;
}

この関数は、1 回だけ呼び出された場合は正解を返しますが、複数回呼び出された場合は Seg Fault を返します。

4

2 に答える 2

5

メモリが割り当てられてsubstrいないため、関数は初期化されていないポインタを参照し、未定義の動作が発生するはずのないメモリに書き込みます。初めて機能するという事実は完全なチャンスです。

にメモリを割り当てますsubstr:

char* substr = malloc(n + 1); /* Plus one for null teminator. */

の呼び出し元には、返されたバッファーがsubstring()必要であることに注意してください。free()

于 2012-04-08T12:01:14.723 に答える
0

部分文字列関数の char *substr にメモリを割り当てる必要があります。現在、セグメンテーション違反を引き起こしているメモリを破壊しています。シンプル: char *substr = (char *)malloc(sizeof(char)*n+1); トリックを行う必要があります。

于 2012-04-08T12:05:42.287 に答える