我寫了這個程序,試圖理解C稍微好一點。它可以工作,但由於某種原因,在正確輸出之前打印(null)。我的代碼:爲什麼我的C程序在執行字符轉換時打印「(null)」?
/* This program will take a string input input from the keyboard, convert the
string into all lowercase characters, then print the result.*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
int i = 0;
/* A nice long string */
char str[1024];
char c;
printf("Please enter a string you wish to convert to all lowercase: ");
/* notice stdin being passed in for keyboard input*/
fgets(str, 1024, stdin); //beware: fgets will add a '\n' character if there is room
printf("\nYour entered string: \n\n%s\n", str);
printf("\nString converted to lowercase: \n\n%s\n");
while(str[i]) { //iterate str and print converted char to screen
c = str[i];
putchar(tolower(c));
i++;
}
putchar('\n'); //empty line to look clean
return 0;
}
順便說一句,我注意到,當如果我的字符串變量添加到最後一個printf函數,問題消失。
替換:
printf("\nString converted to lowercase: \n\n%s\n");
與
printf("\nString converted to lowercase: \n\n%s\n, str");
下面是該問題的樣本輸出:
Please enter a string you wish to convert to all lowercase: THE QUICK BROWN FOX
JUMPED OVER THE LAZY DOG.
Your entered string:
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
String converted to lowercase:
(null)
the quick brown fox jumped over the lazy dog.
Press any key to continue . . .
我剛纔試了一下你PROG沒有看到任何(空) – Satya
@Satya,這個程序會導致未定義的行爲,所以如果你嘗試它,你可能會(可能?)看到不同的行爲。 –
非常感謝@CarlNorum對這樣美麗的解釋 – Satya