以前我使用静态数组:char ch[20]
。但我改变了这种风格bcoz可能需要> 20。所以我宣布为char *ch;
当我移植我的代码时,它看起来像下面的给定价格。
char *word;
char *ch;
char *excluded_string;
char *skp;
std::string result_string;
std::string rcv;
i=0,j=0;
do {
bytesReceived = recv(*csock, buffer.data(), buffer.size(), 0);
if ( bytesReceived == -1 ) {
fprintf(stderr, "Error receiving data %d \n", errno);
goto FINISH; }
else
rcv.append( buffer.cbegin(), buffer.cend() );
182: } while ( bytesReceived == MAX_BUF_LENGTH )
184: **word = strtok(& rcv[0]," ");
185: while (word!= NULL) {
6 skp = BoyerMoore_skip(word, strlen(word) ); //Booyes moore is string search algo
9 if(skp != NULL)
0 {
201 i++;
2 continue;
3 }
4 bfr << excluded_string[j] << " ";
5 result_string = bfr.str();
6 j++;
7 }**
错误:
daemon.cpp:184:8: error: expected ‘;’ before ‘word’
daemon.cpp:188:29: error: invalid conversion from ‘char*’ to ‘char’ [-fpermissive]
daemon.cpp:189:41: error: invalid conversion from ‘char*’ to ‘char’ [-fpermissive]
daemon.cpp:190:51: error: invalid conversion from ‘char’ to ‘const char*’ [-fpermissive]
In file included from daemon.cpp:2:0:
/usr/include/string.h:395:15: error: initializing argument 1 of ‘size_t strlen(const char*)’ [-fpermissive]
daemon.cpp:190:53: error: invalid conversion from ‘char’ to ‘char*’ [-fpermissive]
In file included from daemon.cpp:36:0:
dictionary_exclude.h:4:14: error: initializing argument 1 of ‘char* BoyerMoore_skip(char*, int)’ [-fpermissive]
如何删除这些错误?
答案 0 :(得分:1)
一些提示/指示:
第182行应为} while ( bytesReceived == MAX_BUF_LENGTH );
[末尾分号]
您根本不需要“ch
变量,只需将word
替换为ch[i]
第184行:我不熟悉std::string
,但strtok()修改了输入字符串 - 并且需要在循环结束时调用strtok
。
考虑使用更好的标记化例程,在标记std::string
- https://stackoverflow.com/questions/tagged/tokenize%20string%20c%2b%2b时有很多问题+答案。
答案 1 :(得分:1)
我们认为越复杂,容易变得复杂! std :: ostringstream bfr;
word = strtok(& rcv[0]," ");
while (word!= NULL) {
skp = BoyerMoore_skip(word, strlen(word) );
if(skp != NULL)
{
i++;
printf("this also \n");
word = strtok(NULL, " ");
continue;
}
printf("\n Word %s \n",word);
bfr << word << " ";
result_string = bfr.str();
word = strtok(NULL, " ");
j++;
}