char字符串不起作用,“ \ 0”有什么问题

时间:2019-11-23 16:39:38

标签: c++

我不知道问题是什么?我的代码不起作用。 :(

#include <iostream>
#include <string.h>

using namespace std;

bool isPalindrome(char* word){
   int len = strlen(word);
   if(len <= 1){
       return true;
   }else
       if(word[0] == word[len-1]){
           char n[len-1];
           n[len-1]= "\0";
           return isPalindrome(n);



       }
   return false;

}

int main(){

char *a = "alla";
bool b = isPalindrome(a);
cout<<b<<endl;
return 0;}

错误是“ \ 0”,我不知道为什么。 我的主要功能也不应该正确。

3 个答案:

答案 0 :(得分:1)

我相信"\0"是一个以零结尾的2个字符 C字符串,由一个零和一个零组成。改用'\0',它只是一个零。请记住:对字符串使用双引号,对于单个字符使用单引号。您不能将字符串分配给字符串索引位置,因此双引号不能那样工作,但是您可以 字符分配给字符串索引位置。

第二个错误:读取the documentation on strlen()。用char n[len + 1];而不是char n[len-1];创建n,以使n与另一个字符串相同。然后,空值以n[len]= '\0';而不是n[len - 1]= '\0';终止,因为strlen不计算字符串中的空终止符。但是,我对您的代码感到困惑:此n字符串的目的是什么?最后,您正在编写n数组之外的内容!由于您使n的大小为len - 1,因此需要在索引len - 2处终止null。您的情况下的len - 1在数组之外!始终为null终止 inside 数组,其索引号小于数组的大小。当编译器知道数组的边(例如n的情况)时,请改为这样做:n[sizeof(n) - 1] = '\0';

顺便说一下,您不能在C中使用变量来设置数组长度,而在C ++中,可能需要len才能将const实例化数组。

此外,请以后发布您的确切错误消息。实际上,请编辑您的答案并立即添加,以帮助答案者和将来的读者。

注:通过电话回答,所以我无法根据自己的意愿进行测试或测试。也许我可以稍后再讨论以改善答案。

答案 1 :(得分:1)

简单的答案是您应该

  

使用“ \ 0”代替“ \ 0”

因为n是一个字符数组,您应该使用单引号而不是双引号

希望这会有所帮助

答案 2 :(得分:1)

字符数组元素的分配应仅包含字符,但在这种情况下,您将分配给字符串。请注意,“ / 0”是字符串。尝试使用分配给“ / 0”。