C ++中的char *列表

时间:2013-05-08 12:42:18

标签: c++ list char

我有一个函数打印服务器上连接的所有客户端。我想将所有客户端放在char(list lst)列表中,因为我需要在其他函数中使用它们。当我想迭代列表lst和打印元素看起来像“$ @”。我不明白为什么。 这些是功能:

void get_clients_list(){
    int dim,i = 0,n;
    char buff[255];

    bzero(buff,sizeof(buff));

    recv(srv_fd,buff,sizeof(buff),0);

    dim = atoi(buff);

    printf("\t%d clients available:", dim);
    printf("\n");

    while(i < dim){
        memset(buff, 0, sizeof(buff));
        recv(srv_fd, buff, sizeof(buff),0);
        if(n < 0){
            error("ERROR reading from socket");
        }
        lst.push_back(buff);
        printf("\t\t%s", buff);
        printf("\n");
        i++;
    }
}

以下是我如何遍历列表lst:

get_clients_list();
iter = lst.begin(); 
while(iter != lst.end()) {
    iter ++;
    printf("clients:");
    printf("%s \n",iter);
}

为什么它不打印客户端而只出现一些象形文字?

1 个答案:

答案 0 :(得分:2)

您在此处添加了一个指向局部变量的指针:

lst.push_back(buff);

这是未定义的行为。同样,您需要使用*iter来获取迭代器的内容:

printf("%s \n",*iter);

由于您使用的是C ++,因此使用std::stringiostream库会更简单,更不容易出错。坚持使用这里的代码就是一个小例子:

#include <string>
#include <vector>
#include <iostream>

int main()
{
    char buff[] = "hello, world" ;
    std::vector<std::string> lst;

    lst.push_back( buff ) ;

    std::vector<std::string>::iterator iter = lst.begin() ;
    // In C++11 could be replaced with
    //auto iter = lst.begin() ;

    while( iter != lst.end() )
    {
        std::cout << *iter << std::endl ;
        ++iter ;
    }
}