我从atoi
命令中得到了一些非常奇怪的行为。我试图找到格式为[1:2]的范围内的2个值
正在创建的字符串是使用动态字符串分配宏完成的(如果Sasprintf抛出你)
但是,它将从项目结束时的文件中读入。
无论如何,考虑到token
和token2
的正确值,我似乎正在正确解析我的字符串。但是,我很困惑,为什么在atoi
上拨打token2
会给我一个胡言乱语的答案。另外,我发现在strtok
被弃用的时候,我还没有打扰它,直到我解决了这个错误。
char *token;
char *token2;
int lsb = 0;
int msb = 0;
char *str = NULL;
Sasprintf(str,"[4:0]");
token = strtok(str,"[");
if(token != NULL)
{
token = strtok(token,":");
msb = atoi(token);
printf("%d\n", msb);
token2 = strtok(NULL,"]");
puts(token2);
lsb = atoi(token2);
printf("%d\n",token2);
}
输出
4
0
19853443
答案 0 :(得分:2)
我想,你需要改变
printf("%d\n",token2);
到
printf("%d\n",lsb);
token2
是char *
,您无法使用%d
进行打印。调用undefined behavior
也就是说,总是检查strtok()
的返回值是否为NULL。此外,strtod()
是atoi()
的更好替代方案。
答案 1 :(得分:1)
printf("%d\n",token2);
这不是你打印字符串的方式,使用:
printf("%s\n",token2);
或
printf("%d\n", lsb);
打印转换结果。