-1

次のコード

u_int32 *data_out
data_out = malloc(4  * sizeof(uint32_t));
//connection_fd is a socket
n = write(connection_fd, data_out[0], strlen(data_out[0]));

次のエラーが発生します。

Array.c:261: 警告: 'strlen' の引数 1 を渡すと、キャストなしで整数からポインターが作成されます /usr/include/string.h:399: 注: 'const char *' が予期されますが、引数の型は 'uint32_t' です

次のことも試しましたが、それでも警告が表示されます。

n = write(connection_fd, (char) data_out[0], strlen((char) data_out[0]));
n = write(connection_fd, (char*) data_out[0], strlen((char*) data_out[0]));

洞察をありがとう:)、パトリック

4

3 に答える 3

2

strlen を使用して int を記述するのはなぜですか?
多分使用:

n = write(connection_fd, &(data_out[0]), sizeof(uint32_t));
于 2012-11-23T10:00:53.570 に答える
1

私はあなたの警告メッセージに従っています

1 番目のケース:strlen()を期待していますconst char *

2番目のケース:変換charのみが機能し、たとえ変換してもchar*警告が表示されます。なぜなら、文字列の長さを与えるためにnullで終了した文字列でstrlen()動作しますが、それが問題です\0data_out[i]int

intここでは、ポインタとして渡しているcharため、警告が表示されます:

passing argument 1 of 'strlen' makes pointer from integer without a cast 

メッセージですべてが明確になっているのを見ているので、なぜ理解できなかったのですか。

    Array.c:261: warning: passing argument 1 of 'strlen' makes pointer     
from integer without a cast /usr/include/string.h:399: note: expected 
'const char *' but argument is of type 'uint32_t'

write()問題もありますから。

(char*)data_outまたは(char*)&data_out[0]、代わりに2番目の引数のように、あなたがしたこと。

于 2012-11-23T10:01:16.057 に答える
0

コンパイラは、コードの何が問題なのかを既に伝えているようです。

strlen' は、キャストなしで整数からポインターを作成します

意味: キャストせずに整数をポインター変数に表示しようとしています。

'const char *' が必要ですが、引数の型は 'uint32_t' です

意味: 関数は const charポインターを必要としていましたが、 uint32_t variable instanceを指定しました。

于 2012-11-23T10:33:16.773 に答える