我想給程式一個從 1 到 26(不需要硬編碼)的整數值,它創建一個字符陣列,其中填充了從 A 到字母 n 的字母。這是代碼:
int main(int argc, char *argv[])
{
int n = atoi(argv[1]);
char comb[n];
for (int i = 0; i < n; i )
comb[i] = 65 i;
printf("%s", comb);
}
問題是,如果我交出 8 - 15 和 24 - 26 的值,輸出會顯示如下內容:ABCDEFGH
但是,如果我將 n 硬編碼為上面有問題的值之一,則輸出恰到好處。
有人可以向我解釋一下,為什么程式會輸出額外的 。謝謝
uj5u.com熱心網友回復:
在 C 中將字串轉換為數字型別的標準方法是使用
strto*函式族。在你的情況下,你會想要這樣的:int count = strtol(argv[1], // String NULL, // Optional output pointer to where the scan stopped 10) // Radix我也會檢查一下
argc > 2,即argv[1]實際上是由用戶傳遞的。%s需要一個指向空終止字串的指標。換句話說,printf在看到 之前無法知道字串引數在哪里停止'\0',因此您看到的是行程記憶體的其他部分被列印為文本。修復:在回圈之前分配n 1forcomb,或memset(comb, n 1, 0);在回圈comb[n] = '\0'之后設定。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/369506.html
上一篇:我在C中的for回圈做錯了什么?
