【发布时间】:2014-11-18 14:17:18
【问题描述】:
我有来自 fgets 的记录(使用 popen() 的网络数据,而不是文件),它们是 const char * 数组格式。
const char * cstr = buff;
第三项是一个字符串,需要删除或更改为零。 如何以 5 为增量访问 const char * 数组流中的第三个元素?
1
2
string
4
5
1
2
string
4
5
代码:
while(fgets(buff, sizeof buff, fp) != NULL)
{
const char * cstr2 = buff;
for(int i = 0; i < 5; ++i){
if(i == 3){
if (!strcmp(cstr2, "Buy\n")) {
printf("Found One!\n");
cstr2[2] = 0;
}
if (!strcmp(cstr2, "Sell\n")) {
printf("Found Two!\n");
cstr2[2] = 0;
}
}
}
}
预期输出:
1
2
0
4
5
1
2
0
4
5
错误: 没有匹配和: 错误:分配只读位置 '*(cstr2 + 2u)'
如何正确访问 char 流式 char 数组中的第三个元素?
【问题讨论】:
-
如果到处都是
strcmp调用,这不完全是 C++ 代码。 -
您的代码看起来像 C,而不是 C++。如果您正在使用/编译 C++,则应该使用
std::string而不是 C 字符串。 -
您将面临的一个问题是
const char * cstr2是const,因此您不能这样做:cstr2[2] = 0;。 -
我没有看到您的代码正在使用过滤输入。这些知识对于回答您的问题至关重要。第一个问题(编译)是由 cstr2 声明中的 'const' 限定符引起的。更严重的问题是你想替换第三个字符??? (cstr2[2]) 的当前输入行,而不是您指定的内容。
-
不是第三个字符,而是第三个项目。共有 5 项。