char *ptr = (char*)malloc(10);
if(NULL == ptr)
{
printf("\n Malloc failed \n");
return -1;
}
else if(argc == 1)
{
printf("\n Usage \n");
}
else
{
memset(ptr, 0, 10);
strncpy(ptr, argv[1], 9);
while(*ptr != 'z')
{
ptr++;
}
if(*ptr == 'z')
{
printf("\n String contains 'z'\n");
/* Do some more processing */
}
free(ptr);
}
前のコードでは、プログラムの引数がMixx
であるとします。ポインタをインクリメントするとポインタに割り当てられるメモリのサイズが変更されます
そして、私の質問は次のとおりです。
私はwhileループでこれを行うと:
ptr++;
これはポインタptrに割り当てられたメモリの大きさも変化することを意味し、それは私が自由を呼んときですん()関数がクラッシュします。
を私は悪い質問としてこれを表示されません。 (適切な説明とコードスニペット)。 UVを照射する。 – Bathsheba
'while'ループ中に' \ 0'をチェックしないので、文字列の最後を読み取ってしまいます。 – Koshinae
'argv [1]'に '' z ''が含まれていない限り、動作は '' free() '*の前であっても定義されていません。その結果、準拠しているコンパイラは '' if(* ptr == 'z') '-checkを取り除く可能性があります。 – EOF