簡體   English   中英

用char數組求和int

[英]Sum int with char array

在檢查一些現有代碼時,我碰到了這一行:

char *s = malloc(SIZE);
scanf("%s", s);
char *y = s + strlen(s);

假設scanf()函數成功,將整數添加到char數組是什么意思?

我的期望是得到一個包含s和另一個char的內容的新字符串,該char具有整數的ASCII碼(或至少是原始字符串)。

通過調試此代碼,操作后似乎y=""

這種現象的解釋是什么?

用數組索引操作而不是指針算術的形式編寫此代碼可能更清楚。

int n;
char* y = s + n;
char* y = &s[n];

這兩種形式是等效的。 s是數組中第一個元素的地址。 向其添加一個將為您提供數組中下一個元素的地址,依此類推。 假定數組足夠大,則兩個表達式都求值到數組中第n個元素的地址。 在這種情況下,y指向字符串末尾的空終止符。

strlen(s)查找字符串的長度,該長度也恰好是終止\\0字符的索引。

在指針上添加一個整數會找到一個指針,該指針在內存中還有很多元素。 因此,表達式s + strlen(s)s的長度添加到指針值。 這意味着它將計算一個指向\\0字符的指針。

一種等效的操作方法可能更為簡潔,即

char *y = strchr(s, '\0');

暫無
暫無

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

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