首页 > 解决方案 > char 字符串不起作用 "\0" 有什么问题

问题描述

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

#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" ,我不知道为什么。我的主要功能应该也不对。

标签: c++

解决方案


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

第二个错误:阅读strlen(). char n[len + 1];用, NOT创建 n ,char n[len-1];以使 n 与其他字符串的长度相同。然后, null 以n[len]= '\0';, not终止n[len - 1]= '\0';,因为 strlen 不计算字符串中的 null 终止符。不过,我对您的代码感到困惑:这个 n 字符串的目的是什么?最后,您正在编写 n 数组之外的内容!由于您使 n 具有 size len - 1,因此您需要在 index 处终止 null len - 2len - 1在你的情况下是在数组之外!始终 null在数组以小于数组大小的索引 1 终止。当编译器知道数组的一侧时,例如 n 的情况,改为这样做n[sizeof(n) - 1] = '\0';

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

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

注意:通过我的手机回答,所以我无法测试或像我想要的那样彻底。也许我可以稍后再回来改进我的答案。


推荐阅读