簡體   English   中英

為什么sscanf需要%d整數並不需要%s字符串

[英]Why does sscanf need & for %d integers but not for %s strings

我對sscanf例程中的參數感到困惑

#include <string.h>
char sentence[20];
char first_name[7];
char last_name[7];
int age;

strcpy(sentence, "aaaaaa bbbbbb 20");
sscanf(sentence, "%s %s %d", first_name, last_name, &age);

為什么char數組不需要&帶前綴但整數變量呢?

謝謝

C中的字符串是一個字符序列,后跟一個'\\ 0'字符。 C語言中的數組名稱是初始元素的地址。 因此,對於單個整數,您將需要添加'&'來傳遞要存儲int的地址。

在C語言中,數組的名稱表示基地址。
sscanf()您需要傳遞可以存儲變量值的存儲位置。 因此, & address of ,用於原始類型的情況下獲取地址。 這就是為什么&int數據類型一起使用的原因。 但是string是字符數組(后跟'\\0' ),name提供了基地址。

&在所調用的函數中隱含地址

sscanf期望變量的地址,以便它可以將從給定字符串中讀取的值存儲到這些地址中(並因此存儲在這些變量中)。

C語言中的數組名稱本身是指第一個數組元素的地址,但是對於變量,則需要指定變量的地址。

在C語言中,字符數組的標識符作為指向數組第一個元素的指針而衰減。

sscanf()函數需要一個指向內存位置的指針才能在其中寫入數據,如果您傳遞的是int類型,則應在變量名前加上& ,這樣才能有效地傳遞變量的地址。 這樣,sscanf可以直接在變量的內存位置上寫入。 您是通過引用而不是副本傳遞參數。

由於數組名稱被衰減為指向數組第一個元素的指針,因此您無需在其前面加上&前綴,因為sscanf已經訪問了內存位置。

暫無
暫無

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

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