* str和atoi(str)之间的区别

时间:2011-08-09 23:06:11

标签: c tokenize strtok

我正在进行标记,并使用strtok在文本文件(已经读入数组'store')中使用分隔符'='

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

我做了:

str = strtok(store, "=");

str= strtok(NULL, "=");

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

我希望有人能说清楚这一点,不应该取消引用str也给我180?

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分:2)

没有。 atoi为您提供字符串str所代表的整数。解除引用str(* str)会为您提供char str指向的值(这不是您编写的值)。

答案 2 :(得分:1)

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