【发布时间】:2015-06-21 22:17:38
【问题描述】:
一个简单的问题:
这个功能在我的 32 位 Linux 上完美运行,然后我得到了一个 64 位 Linux,现在它不再工作了。在将数据从 Char 转换为 Int 时,我已将其范围缩小到此函数。它不再这样做了。这就是我现在所困的地方。所有这些函数所做的就是采用像这样的 100x100 格式,然后切掉 x 并在两边保留两个数字,然后将它们更改为 Int。
使用 atoi 现在返回垃圾,因为我在这个 64 位 Linux 上运行它。我必须使用什么函数调用才能使它现在只能在 32 位和 64 位 Linux 程序上再次工作?
int findX(char *whereisX, int *rW, int *rH)
{
printf("entering findx dia is %s\n\n", whereisX);
char *tok1, *tok2, *saveptr;
char x = (int) malloc(sizeof(whereisX));
char str1[x];
int bW, bH;
strcpy(str1, whereisX);
tok1 = strtok_r(whereisX, "x", &saveptr);
tok2 = strtok_r(NULL, "x", &saveptr);
if ( tok2 == NULL)
{ printf("found return 1\n");
return 1;
}
else
{ printf("returning 0\n");
tok1 = strtok_r(str1, "x", &saveptr);
tok2 = strtok_r(NULL, "x", &saveptr);
printf("tok1 is .. %s and tok2 is %s\n", tok1 , tok2);
// here is where I am converting it from Char to Int
// using atoi now gives me back junk
// bW = atoi(tok1);
// bH = atoi(tok2);
bW = atoll(tok1);
bH = atoll(tok2);
printf("bW is %c and bH is %c\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 %s rH is %s\n", rW , rH);
return 0;
}
} //end findX
输出是
tok1 is .. 200 and tok2 is 100
// after converting from char to int using atoi
bW is � and bH is d
rW is � rH is d
【问题讨论】:
-
char x = (int) malloc(sizeof(whereisX));没有意义。 -
检查函数的 3d 线...
-
有至少两个错误:废话
malloc和printf("bW is %c and bH is %c\n", bW, bH);:如果bW和bH是int,那么你应该使用%d -
我不关心 printf,因为我不是一个经验丰富的程序员永远不会有两个原因——我只是把它们扔进去,看看我的代码发生了什么—— - 我只是把这段代码添加到它上面,使程序给我更多的权力来做我想做的任何事情,然后是其他人做的事情。 printf 将被删除。这是我用 C 编写的唯一程序,很可能也是最后一个程序 @xanatos
标签: c linux 32bit-64bit