簡體   English   中英

*str 和 atoi(str) 的區別

[英]Difference between *str and atoi(str)

我正在標記化,並在帶有分隔符'='的文本文件(已讀入數組'store')上使用strtok

所以文件中有一條語句: TCP.port = 180

我做到了:

str = strtok(store, "=");

str= strtok(NULL, "=");

現在如果我做*str ,它會給我 '82' (可能是一些垃圾值)但是atoi(str); 給我 180(正確的值)

我希望有人能對此有所了解,不應該取消引用 str 給我 180 嗎?

編譯並運行這個程序。 它應該讓您更好地了解正在發生的事情。

#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;
}

這是 output:

s       = "180"
atoi(s) = 180
*s      = 49 = '1'

沒有, atoi給你字符串str指向的 integer。 取消引用str (*str) 為您提供 char str指向的值(這不是您編寫的值)。

您需要准確了解字符串在 C 中的工作原理,以了解這里發生了什么。 str變量是指向字符串中第一個字符的指針。 取消引用str給出了str指向的值,即字符'1' 同樣,取消引用str+1將為您提供下一個字符'8' 您可以看到字符串的結尾是如何用*(str+3) (或等效地str[3] )表示的,它給出了一個 null 字節。 function atoi知道如何將字符解釋為 ASCII 字符的 base-10 字符串,這比取消引用要復雜得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM