我正在尝试计算char数组中的字符数,包括直到字符串结尾的空格。
以下编译但没有返回正确的值,我正在尝试使用指针算法来遍历我的数组。
int numberOfCharsInArray(char* array) {
int numberOfChars = 0;
while (array++ != '\0') {
numberOfChars++;
}
return numberOfChars;
}
非常感谢。
显然我试图从cstring获得相当于length()但使用简单的char数组。
当然如果我的原始数组没有空终止,这可能会导致一个非常大的值返回(我猜)。
答案 0 :(得分:7)
要通过指针访问char指针,需要取消引用指针。目前你是
比较array
(地址)和
'\0'
您可以修改代码,如:
int numberOfCharsInArray(char* array){
int numberOfChars = 0;
while (*array++){
numberOfChars++;
}
return numberOfChars;
}
您正在模仿的cstring函数是strlen
而不是length
。
修改强>
要知道while中的条件是如何工作的,您可以看到this thread。
答案 1 :(得分:4)
也许我错过了一些东西,但为什么不呢:
int numberOfCharsInArray(char* array) {
return strlen(array);
}
......甚至:
int numberOfCharsInArray(char* array) {
return std::string(array).length();
}
答案 2 :(得分:2)
当您编写array++ != '\0'
时,检查内存地址 array
是否为'\ 0'。试试这个:
int numberOfCharsInArray(char* array){
int numberOfChars = 0;
while (*array != '\0'){
numberOfChars++; array++;
}
return numberOfChars;
}
编辑:哎呀,codaddict更快,他的代码更优雅。
答案 3 :(得分:0)
static const size_t maxExpectedChars = 4 * 1024; // Max chars expected, e.g. 4K
size_t numberOfCharsInArray( char * array) {
if( !array ) { return 0; } // A non-existing string has `0` length
size_t charsSoFar = 0;
while ( *array ) {
charsSoFar += 1;
if( charsSoFar == maxExpectedChars ) { break; } // Stop runaway loop
++array;
}
return charsSoFar;
}