我正在刷新一些C++,因此我試圖解決的一個問題是計數字符指針中的字符,並根據我期望看到的內容進行檢查。然而在我的解決方案中,我注意到了一個特殊的結果。我將一個char引用傳遞給了我的函數,並且它返回了一個3的計數。爲什麼參考測試會返回一個計數爲3的字符引用?計數字符指針中的字符
我意識到字符沒有空終止符,所以代碼不斷地計數,但它最終返回結果,所以這意味着解決方案不足。任何想法,使其更強大?這是我的解決方案和結果。
CountCharacters.cpp
#include <cstdio>
#include <iostream>
#define ASSERT_EQUALS(paramx1, paramx2) \
{\
int param1 = paramx1;\
int param2 = paramx2;\
if (param1==param2)\
std::cout << "PASS! param1=" << param1 << " param2=" << param2 << std::endl;\
else\
std::cout << "FAIL! param1=" << param1 << " param2=" << param2 << std::endl;\
}
int countCharacters(const char * characters);
int main()
{
char character = '1';
ASSERT_EQUALS(countCharacters("string8\0"), 7);
ASSERT_EQUALS(countCharacters("\0"), 0);
ASSERT_EQUALS(countCharacters(""), 0);
ASSERT_EQUALS(countCharacters(NULL), 0);
ASSERT_EQUALS(countCharacters(&character), 1);
ASSERT_EQUALS(countCharacters('\0'), 0);
return 0;
}
int countCharacters(const char * characters)
{
if (!characters) return 0;
int count = 0;
const char * mySpot = characters;
while (*(mySpot) != '\0')
{
std::cout << "Count=" << count << " mySpot=" << *(mySpot) << std::endl;
count++;
mySpot++;
}
return count;
}
結果:
PASS! param1=7 param2=7
PASS! param1=0 param2=0
PASS! param1=0 param2=0
PASS! param1=0 param2=0
FAIL! param1=2 param2=1
PASS! param1=0 param2=0
你想重塑多少個車輪?有一個codereview的網站。 –
[單個字符上的Strlen函數行爲]的可能重複(http://stackoverflow.com/questions/35477662/strlen-function-behavior-on-single-character) –
您無法調整countCharacters功能到這種情況。沒有辦法確定它是否被賦予了以null結尾的字符串或單個字符。我認爲你最好的選擇是如果你這樣做是爲了超過char *的函數並返回1. – Squidy