将静态数组转换为char *并管理类型转换

时间:2013-09-07 17:47:14

标签: c++ pointers

以前我使用静态数组: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]

如何删除这些错误?

2 个答案:

答案 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++; 
        }