我正在爲我正在做的初學C++類做一些編碼。在課堂上,我們必須接受另一名學生提交的代碼並修復他們創建的錯誤。代碼如下:空終止符 1?
#include <iostream>
using namespace std;
int countChars(char *, char); // Function prototype
int main()
{
const int SIZE = 51; // Array size
char userString[SIZE]; // To hold a string
char letter; // The character to count
// Get a string from the user.
cout << "Enter a string (up to 50 characters): ";
cin.getline(userString, SIZE);
// Get a character to count occurrences of within the string.
cout << "Enter a character and I will tell you how many\n";
cout << "times it appears in the string: ";
cin >> letter;
// Display the number of times the character appears.
cout << letter << " appears ";
cout << countChars(userString, letter) << " times.\n";
return 0;
}
int countChars(char *strPtr, char ch)
{
int times = 0; // Number of times ch appears in the string
// Step through the string counting occurrences of ch.
while (*strPtr != '\0')// ***** There was a one placed inside the null operator, however, this is not a syntax error, but rather just incorrect.
{
if (*strPtr == ch) // If the current character equals ch...
times++; // ... increment the counter
strPtr++; // Go to the next char in the string.
}
return times;
}
學生改變了這樣的功能,它已空終止爲\10
,這並沒有引起編譯也不運行時錯誤。玩過之後,我發現它也可能是\1
並且仍然有效。這怎麼可能。我是一個完全noob,所以我很抱歉如果這是一個愚蠢的問題,但我認爲這是一個布爾運算符,1是真的,0是錯誤的。問題是爲什麼\10
和\1
將作爲空終止符。先謝謝你!
'\ number'指轉義序列編寫由數字代碼的象徵,就像'\ xnumber'不一樣的,但現在你在十六進制指定它。在語法方面,除了只有''\ 0'(在字符串外部也可以表示爲'\ x00''或者甚至只是'0')時,這裏沒有任何錯誤是一個有效的空終止符。 – Havenard
請注意''\ 1''和其他數字不「仍然有效」。該程序要麼有運行時錯誤,要麼有幸運。幸運的是,我的意思是你的'while'循環不斷讀取數組的末尾,並進入具有不可預知值的內存中。這種語言不會阻止你編寫這樣的代碼,但這就是所謂的「未定義的行爲」。什麼事情都可能發生。例如,你可能很幸運,並且恰好在下一個位置有一個值爲'1'的字節,並且你的程序看起來工作正常。或者沒有和你的程序永遠循環。或者是其他東西。它沒有定義。 – Adam