c++ - 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" ,我不知道为什么。我的主要功能应该也不对。
解决方案
我相信"\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 - 2
。len - 1
在你的情况下是在数组之外!始终 null在数组内以小于数组大小的索引 1 终止。当编译器知道数组的一侧时,例如 n 的情况,改为这样做n[sizeof(n) - 1] = '\0';
:
顺便说一句,您不能使用变量在 C 中设置数组长度,而在 C++ 中,它可能需要 len 为 const 才能实例化数组。
另外,请在以后发布您的确切错误消息。事实上,请编辑您的答案并立即添加,以帮助回答者和未来的读者。
注意:通过我的手机回答,所以我无法测试或像我想要的那样彻底。也许我可以稍后再回来改进我的答案。
推荐阅读
- python - 在 Python 中使用 subprocess.run 捕获子进程脚本的完整输出
- javascript - 为什么我的 .collapse("show") & .collapse("hide") 不起作用?
- javascript - 我无法在页面上显示 vue-chart.js
- reactjs - React JS Chart JS 2 没有在后台隐藏网格线
- rust - 预期结构,但发现对结构的可变引用
- javascript - Mapbox-gl-js 生成不同的图标
- python - 条件为 True 时重新加载 dash 应用程序的方法
- python - 将xlsx文件转换为csv文件时如何修复python3中的__init__ typeError?
- r - 如何使用 GenomicRanges 制作序列图
- kotlin - 为什么尝试在 GoogleMap 上放置标记时出现 NullPointerException?