1

関数「strdup」を使用して char* を char** に挿入すると、search.c:174:13: warning: assignment makes pointer from integer without a cast [enabled by default]警告が表示されます。

char** temp;
...

temp = NULL;
...

temp[0] = strdup(tokens[i]);

Wheretokens[i]は関数からの単なる文字列strtok()です。

関連しているとは思いませんが、この警告もあります search.c:174:5: warning: implicit declaration of function ‘strdup’ [-Wimplicit-function-declaration]...-ansiフラグがあり、関数が機能していることを確認したためにのみ表示されます。警告が表示されるのは嫌いです。

また、この質問に回答があった場合はお詫び申し上げます。これに似た質問がたくさんありますが、私のタイプが一致していると言えるため、どれも役に立ちませんでした。(明らかに、警告が表示されている場合はそうではありません)

4

3 に答える 3

6

関連しているとは思いませんが、この警告もあります... search.c:174:5: 警告: 関数 'strdup' の暗黙の宣言 [-Wimplicit-function-declaration]

それは関連しており、どちらも同じ原因を持っています。スコープ内にのプロトタイプがないstrdupため、戻り値の型はint(C89/C90 では、暗黙の宣言は C99 で削除されましたが、デフォルトで広く受け入れられています) と見なされます。

定義できる機能#include <string.h>テスト マクロの 1 つを有効にする必要があります。strdup_XOPEN_SOURCE >= 500_BSD_SOURCE-ansi

于 2012-11-17T01:11:33.297 に答える
5

GCC の-ansiフラグは、古い ISO C90 標準の互換モードを設定します。strdupその標準では定義されていません。これは POSIX 関数です。-ansi厳密に C90 準拠のコードをコンパイルするためのフラグを取り除くか、 POSIX API の使用を控えて標準に準拠してください。

于 2012-11-17T01:15:18.610 に答える
1

#includeおそらくいくつかのファイルを忘れていました。私の推測では、関数の前、およびソース ファイルの先頭付近に次を追加する必要があります。

#include <string.h>
于 2012-11-17T01:11:48.983 に答える