我正在进行标记,并使用strtok在文本文件(已经读入数组'store')中使用分隔符'='
所以文件中有一条声明:TCP.port = 180
我做了:
str = strtok(store, "=");
str= strtok(NULL, "=");
现在,如果我做*str
,它会给我'82'(可能是一些垃圾值)
但是atoi(str);
给了我180(正确值)
我希望有人能说清楚这一点,不应该取消引用str也给我180?
答案 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的字符串,这比取消引用要复杂得多。