C++使用指针实现字符串数组图书查找的代码调试求助
C++指针版本图书查询功能调试修复
核心错误点
- 指针类型定义错误:你定义的
const char *p[10][100]是二维指针数组,和二维字符数组的指针类型不匹配。char A[10][100]是由10个长度为100的char数组组成的二维数组,指向它的行指针应该定义为char (*p)[100],表示指向长度为100的char数组的指针。 - 指针偏移步长错误:错误定义的p执行
p++时,步长不符合二维数组行的偏移规则,无法正确跳转到下一个书名的首地址。 - 可选优化:原代码中存储搜索关键词的
s数组长度只有10,超过9个字符的书名会触发缓冲区溢出,建议修改为和A的行长度一致的100。
修复后完整代码
#include <iostream> #include <string.h> using namespace std; int main() { int n,i,c=0; char A[10][100],s[100]; char (*p)[100]; // 修正指针类型 cout<<"Enter no:of books: "; cin>>n; for(i=0;i<n;i++) cin>>A[i]; cout<<"Enter book you want to search: "; cin>>s; p = A; // 直接赋值数组名,等价于p=&A[0] for(i=0;i<n;i++) { if(strcmp(*p,s)==0) c++; p++; // 步长为100字节,刚好跳转到下一行 } if(c==0) cout<<"Not found"; else cout<<"Book found"; return 0; }
内容的提问来源于stack exchange,提问作者Gokul Jayan
相关产品推荐
相关产品推荐

