我需要獲取最大長度爲50個字符的用戶輸入字符串。因此我在50處定義了一個MAX_STRING_LENGTH
變量,並且該字符串使用51個字符初始化。但是,每次輸入大於48個字符時,都會從最後兩個字符中剪切字符串。這是一項學校練習,我不能使用<string.h>
。正在切斷兩個字符的字符串
#include <stdio.h>
#define MAX_STRING_LENGTH 50
int main(void)
{
int j=0;
char stringInput[MAX_STRING_LENGTH+1]; //string initialized.
printf("Please enter a valid string\n");
fgets(stringInput,MAX_STRING_LENGTH,stdin); //string input.
for(j=0;stringInput[j]!='\0';j++);
if(j<MAX_STRING_LENGTH+1)
{
j=j-1;
stringInput[j]='\0'; //remove newline if it exists
}
//...
return 0;
}
我不明白爲什麼字符串丟失2個字符。
我假設總是在使用fgets
時(即使輸入了一個完整的50個字符的字符串)創建一個換行符(\n
),並且總是丟失1個字符(因此我必須增加字符串大小的字符串)。但是我不明白對方角色是如何丟失的。
我將不勝感激您的反饋。謝謝
請仔細閱讀fgets的文檔。它總是存儲一個空終止符,所以它讀取的字符數小於傳遞它的大小,所以你永遠不能讀取50個字符(因爲它只能讀取49個字符,然後存儲一個空字符)。你聲稱刪除了一個換行符「如果它存在」,但是總是無條件地刪除它,即使最後一個字符不是新行 - 停止這樣做。你爲什麼手工重新實施'strlen'? –
所以如果你輸入49個字符,你會得到47嗎?或46? – KyleKW
如何用51個值(每個問題的第二個句子)初始化50個*字符數組*? –