您的代码的正确版本是:
int findX(char *whereisX, int *rW, int *rH)
{
printf("entering findx dia is %s\n\n", whereisX);
char *tok1, *tok2, *saveptr;
char *str1 = (char*)malloc(1 + strlen(whereisX));
int bW, bH;
strcpy(str1, whereisX);
tok1 = strtok_k(whereisX, "x", &saveptr);
tok2 = strtok_k(NULL, "x", &saveptr);
if (tok2 == NULL)
{
printf("found return 1\n");
free(str1);
return 1;
}
else
{
printf("returning 0\n");
tok1 = strtok_k(str1, "x", &saveptr);
tok2 = strtok_k(NULL, "x", &saveptr);
printf("tok1 is .. %s and tok2 is %s\n", tok1, tok2);
bW = atoi(tok1);
bH = atoi(tok2);
printf("bW is %d and bH is %d\n", bW, bH);
/* assigning the results to the output */
*rW = bW;
*rH = bH;
printf("rW is %d rH is %d\n", *rW, *rH);
printf("tok1 is %s tok2 is %s\n", tok1, tok2);
free(str1);
return 0;
}
} //end findX
请注意不同之处:您以完全错误的方式使用malloc ,以完全错误的方式使用了printf格式标识符,没有free分配的字符串。
我还要补充一点,您执行了strtok_r两次(一次在if外,一次在if )。 两者将返回相同的数据,因为str1是whereisX的副本
然后可以将代码简化为:
int findX(char *whereisX, int *rW, int *rH)
{
printf("entering findx dia is %s\n\n", whereisX);
char *tok1, *tok2, *saveptr;
int bW, bH;
tok1 = strtok_k(whereisX, "x", &saveptr);
tok2 = strtok_k(NULL, "x", &saveptr);
if (tok2 == NULL)
{
printf("found return 1\n");
return 1;
}
else
{
printf("returning 0\n");
printf("tok1 is .. %s and tok2 is %s\n", tok1, tok2);
bW = atoi(tok1);
bH = atoi(tok2);
printf("bW is %d and bH is %d\n", bW, bH);
// printf("string -- bW is %s and bH is %s\n", bW,bH);
/* assigning the results to the output */
*rW = bW;
*rH = bH;
printf("rW is %d rH is %d\n", *rW, *rH);
printf("tok1 is %s tok2 is %s\n", tok1, tok2);
return 0;
}
} //end findX
用C编写的随机程序有时会返回似乎正确的东西这一事实并不意味着它们是正确的。 这仅意味着您很幸运。 这种运气不会永远持续下去。