0

我正在标记化,并在带有分隔符'='的文本文件(已读入数组'store')上使用strtok

所以文件中有一条声明:TCP.port = 180

我做到了:

str = strtok(store, "=");

str= strtok(NULL, "=");

现在,如果我这样做*str,它会给我 '82'(可能是一些垃圾值)但atoi(str);给我 180(正确值)

我希望有人能对此有所了解,不应该取消引用 str 给我 180 吗?

4

3 回答 3

3

编译并运行这个程序。它应该让您更好地了解正在发生的事情。

#include <stdlib.h>
#include <stdio.h>

int main(void) {
    const char *s = "180";
    printf("s       = \"%s\"\n", s);
    printf("atoi(s) = %d\n", atoi(s));
    printf("*s      = %d = '%c'\n", *s, *s);
    return 0;
}

这是输出:

s       = "180"
atoi(s) = 180
*s      = 49 = '1'
于 2011-08-09T23:26:06.157 回答
2

No.atoi为您提供由字符串str指向的整数表示的整数。取消引用str(*str) 为您提供 charstr指向的值(这不是您写入的值)。

于 2011-08-09T23:16:50.493 回答
1

您需要准确了解字符串在 C 中是如何工作的,才能了解这里发生了什么。该str变量是指向字符串中第一个字符的指针。解引用str给出了 所指向的值str,即字符'1'。同样,取消引用str+1将为您提供下一个字符'8'. 您可以看到字符串的结尾是如何用*(str+3)(或等价的str[3])表示的,它给出了一个空字节。该函数atoi知道如何将字符解释为 ASCII 字符的 base-10 字符串,这比取消引用要复杂得多。

于 2011-08-10T02:44:54.230 回答