C/C++エラー小記録

3237 ワード

一:文字列に対するstrlen()とsizeof
#include <string.h>

#include <stdio.h>



int main(void)

{

  char* p="helo 163
"; printf("strlen:%d sizeof: %d",strlen(p),sizeof(p)); }

出力:strlen:9 sizeof:8
C文字の定義方法について:http://hanxuedog.iteye.com/blog/1299186
sizeofとstrlen()の説明:http://baike.baidu.com/link?url=JXd1hQfX4jLPzLfkKrOBkNSALUy4mF4Qu3BkhHowWhUseSu1WK8CD8FoZsZLgZ9kbqER1WetGbFCUdTBNzR_fq
int strlen(char*s)関数は、メモリ位置sから、最初の文字列の終端記号'0'にぶつかるまでの(含まない)文字の個数を返します.コンパイラは自動的に'0'を追加します.strlen()の結果は問題ありません.改行記号も計算します.
sizeof
fは変数宣言後に占めるメモリ数を返し、sizeofは関数ではなくオペレータである.この例でsizeofが求めるのはポインタpという変数が占めるメモリサイズ......ポインタタイプは私のパソコンで8バイトを占めています.
#include <string.h>

#include <stdio.h>



int main(void)

{

  char* p="helo 163
"; printf("strlen:%d sizeof: %d
",strlen(p),sizeof(p)); char* t; printf("sizeof(int):%d sizeof(char):%d sizeof :%d
",sizeof(int),sizeof(char),sizeof(t)); printf(" :%d
",sizeof(void *)); }

smtp socket send()で大間違いをしたんだよ!午後になっても夜になってもこれだと気づかなかったので、改行を少なくして送ったのですが...道理でサーバーは半日も物を送って帰ってこないわけだ.....send()は成功し、recv()が間違っていると思っていました!