c - 如何重置 C 字符串指针的值?
问题描述
我试图两次使用相同的指针,如下所示:
void* pointer = (char*) malloc(15);
pointer = "Patricia";
printf("%s", pointer);
pointer = "John";
printf("%s", pointer);
但我收到的输出是这样的:
Patricia
Johnicia
这是完整的代码(客户端脚本是一个 python 脚本,所以我觉得这里不适合发布)(John 和 Patricia 是客户端可能输入的用户名示例):
#define MAXCLIENTS 256
#define MAXMSG 269
void forward(int clientslist[MAXCLIENTS], char* msg) {
int x;
for (x=0; x < MAXCLIENTS; x++){
send(clientslist[x], msg, MAXMSG, 0);
}
return;
}
int main(){
#define PORT 5943
int s = socket(AF_INET, SOCK_STREAM, 0);
int clients[MAXCLIENTS];
int clientcounter = 0;
fd_set socketlist, readlist;
FD_ZERO(&socketlist);
FD_SET(s, &socketlist);
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr = INADDR_ANY;
bind(s, (struct sockaddr*) &server, sizeof(server));
listen(s, MAXCLIENTS);
int clientsocket;
int i;
void* msg = (char *) malloc(MAXMSG);
void* usr = (char*) malloc(10);
while (1){
readlist = socketlist;
select(FD_SETSIZE, &readlist, NULL, NULL, NULL);
for (i=0; i<FD_SETSIZE; i++){
if(FD_ISSET(i, &readlist)){
if (i == s){
clientsocket = accept(s, NULL, NULL);
FD_SET(clientsocket, &socketlist);
clients[clientcounter] = clientsocket;
clientcounter++;
recv(clientsocket, usr, 10, 0);
printf("Connection received from %s\n", usr);
} else {
recv(i, msg, MAXMSG, 0);
forward(clients, msg);
}
}
}
}
return 0;
}
我该如何解决??谢谢
解决方案
recv
返回读取的字节数,您只需要添加一个空终止符。例如:
ssize_t rc;
rc = recv(clientsocket, usr, 9, 0);
if( rc >= 0 )
usr[rc] = '\0';
请注意,我已经减少了对 recv 的调用中的长度参数,以确保有空间用于终止符。如果您希望接收长度为 10 的消息,您可能希望为 usr 分配至少 11 个字节。但是,对于这么小的缓冲区,使用数组并执行以下操作可能会更干净:
char usr[11];
ssize_t rc;
rc = recv(clientsocket, usr, sizeof usr - 1, 0);
if( rc >= 0 )
usr[rc] = '\0';
推荐阅读
- python - (已解决)基于文件的字符串/变量在python操作中设置文件路径等
- python - Python:创建一个交换键的子字典
- node.js - react-pdf 从后端 url 渲染图像不加载图像
- drupal - 覆盖 FieldPluginBase 初始化函数 Drupal
- arrays - 如何快速解析这种 JSON 格式
- flutter - 如何从 Cloud Firestore 获取字符串列表?
- javascript - AngularJS中动态命名输入字段的验证
- javascript - Typescript 和 React:类型“元素”不可分配给类型“FunctionComponent<{}>”
- algorithm - 哈希删除算法
- angular - Angualr HttpClient 得到响应不正确?