Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 返回奇怪值的atoi()_C_Strtok_Atoi - Fatal编程技术网

C 返回奇怪值的atoi()

C 返回奇怪值的atoi(),c,strtok,atoi,C,Strtok,Atoi,我从atoi命令中得到了一些非常奇怪的行为。我试图在[1:2]格式的范围外找到2个值 正在创建的字符串使用动态字符串分配宏完成(如果Sasprintf抛出) 然而,它将在项目结束时从文件中读取。 无论如何,如果token和token2的值正确,我似乎正确地解析了我的字符串。然而,我很困惑,为什么在token2上调用atoi会给我一个含糊不清的答案。此外,我发现在这期间,strtok被弃用了,我只是还没有费心切换它,直到我解决了这个bug char *token; char *token2; i

我从
atoi
命令中得到了一些非常奇怪的行为。我试图在[1:2]格式的范围外找到2个值 正在创建的字符串使用动态字符串分配宏完成(如果Sasprintf抛出) 然而,它将在项目结束时从文件中读取。 无论如何,如果
token
token2
的值正确,我似乎正确地解析了我的字符串。然而,我很困惑,为什么在
token2
上调用
atoi
会给我一个含糊不清的答案。此外,我发现在这期间,
strtok
被弃用了,我只是还没有费心切换它,直到我解决了这个bug

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);
}
输出

四,

0

19853443


我认为,你需要改变

  printf("%d\n",token2);

token2
是一个
char*
,您不能使用
%d
打印它。援引


也就是说,始终检查
strtok()
的返回值是否为NULL。另外,是atoi()的更好的替代品。

我认为,您需要改变

  printf("%d\n",token2);

token2
是一个
char*
,您不能使用
%d
打印它。援引


也就是说,始终检查
strtok()
的返回值是否为NULL。另外,是atoi()的更好的替代品。

我认为,您需要改变

  printf("%d\n",token2);

token2
是一个
char*
,您不能使用
%d
打印它。援引


也就是说,始终检查
strtok()
的返回值是否为NULL。另外,是atoi()的更好的替代品。

我认为,您需要改变

  printf("%d\n",token2);

token2
是一个
char*
,您不能使用
%d
打印它。援引

也就是说,始终检查
strtok()
的返回值是否为NULL。此外,它还是
atoi()
的更好替代品

这不是打印字符串的方式,请使用:

    printf("%s\n",token2);

打印转换结果

这不是打印字符串的方式,请使用:

    printf("%s\n",token2);

打印转换结果

这不是打印字符串的方式,请使用:

    printf("%s\n",token2);

打印转换结果

这不是打印字符串的方式,请使用:

    printf("%s\n",token2);



打印转换结果。

strtok不推荐使用
…如何使用?我猜是因为它不是可重入的
printf(“%d\n”,token2)应该是
printf(“%d\n”,lsb),不是吗?否则,您将打印出指针的整数表示形式。从什么时候开始,strtok被弃用了?@SouravGhosh@haccks
man strtok
=>
这个接口已被strep(3)淘汰。
strtok被弃用了
…如何?我猜是因为它不是可重入的
printf(“%d\n”,token2)应该是
printf(“%d\n”,lsb),不是吗?否则,您将打印出指针的整数表示形式。从什么时候开始,strtok被弃用了?@SouravGhosh@haccks
man strtok
=>
这个接口已被strep(3)淘汰。
strtok被弃用了
…如何?我猜是因为它不是可重入的
printf(“%d\n”,token2)应该是
printf(“%d\n”,lsb),不是吗?否则,您将打印出指针的整数表示形式。从什么时候开始,strtok被弃用了?@SouravGhosh@haccks
man strtok
=>
这个接口已被strep(3)淘汰。
strtok被弃用了
…如何?我猜是因为它不是可重入的
printf(“%d\n”,token2)应该是
printf(“%d\n”,lsb),不是吗?否则,您将打印出指针的整数表示形式。从什么时候开始
strtok
不推荐使用?@SouravGhosh@haccks
man strtok
=>
这个接口已被strep(3)淘汰。
是的,真是愚蠢的错误。我只是在寻找一些行为上的东西,而我却很笨!谢谢你,真是愚蠢的错误。我只是在寻找一些行为上的东西,而我却很笨!谢谢你,真是愚蠢的错误。我只是在寻找一些行为上的东西,而我却很笨!谢谢你,真是愚蠢的错误。我只是在寻找一些行为上的东西,而我却很笨!谢谢