char tempName1[50];
char* tempName2 = NULL;
char tempName3[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的数据。