chartempName1[50];char*tempName2 = NULL;chartempName3[5][50];memcpy(tempName3[0], "F:\\1001_1_1.bmp", sizeof(tempName3[0]));memcpy(tempName3[1], "F:\\1001_1_2.bmp", sizeof(tempName3[1]));memcpy(tempName3[2], "F:\\1001_1_3.bmp", sizeof(tempName3[2]));memcpy(tempName3[3], "F:\\1001_1_4.bmp", sizeof(tempName3[3]));memcpy(tempName3[4], "F:\\1001_1_5.bmp", sizeof(tempName3[4]));for (k=0; k<5; k++){strcpy(tempName1, tempName3[k]);printf("%s\n", tempName1);strcpy(tempName2, "ssss"); //出錯!!//對tempName1進行處理//…strtok(tempName1, "_");strtok(NULL, "_");tempName2 = strtok(NULL, "_");}
上述代碼進入第二次迴圈時,執行完strcpy(tempName2, "ssss")後tempName1被改變,導致後續無法對tempName1進行處理。
原因:
tempName2 = strtok(NULL, "_")後tempName2指向tempName1數組中第二個"_"後的元素地址。
因此第二次迴圈開始對tempName1賦完值後(strcpy(tempName1, tempName3[k])),再對tempName2(strcpy(tempName2, "ssss"))賦值是不對的,這樣會修改了tempName1的資料。