-3

Previously I took static array like : char ch[20]. but I changed this style bcoz may it need to be >20. So I declared it as char *ch; While I ported my code it look like below with given prices.

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       }**    

Error:

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]

How to remove these error?

4

2 回答 2

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++; 
        }    
于 2013-09-08T07:16:47.210 回答
1

一些提示/指针:

第 182 行应该是} while ( bytesReceived == MAX_BUF_LENGTH );[末尾的分号]

您根本不需要 'ch变量,您可以替换wordch[i]

第 184 行:我不熟悉std::string,但strtok()修改了输入字符串——并且需要strtok在循环结束时调用 to。

考虑使用更好的标记例程,SO 有很多关于标记的问题+答案std::string- https://stackoverflow.com/questions/tagged/tokenize%20string%20c%2b%2b

于 2013-09-07T18:52:09.663 回答