我正在尝试制作一个简单的聊天程序而且我遇到了分段错误 我的理解类似于java中的空指针。我想我找到了问题但是 我不知道如何解决它。尝试打印iP地址时会抛出错误。 我如何正确地尝试将其初始化为此字符串?我试过了
char iP[20] = "asskdf";
和
char *iP;
strcpy(iP, "lsdlfkj");
这是我的主要代码。 serverMenu什么也没做
#include <stdio.h>
#include <string.h>
#define CAP 15
int size = 0;
int serverMenu(int task, char *userid, char *ipA);
struct user{
char username[20];
char *ipAdress;
unsigned short portNumber;
};
struct user chatroom[CAP];
int main(){
char username[20];
char *iP;
strcpy(iP, "aasdas");
unsigned short portNumber;
printf("Welcome to the chat room!\n");
printf("Please enter your username (up to 20 characters long):\n");
scanf("%s", username);
printf("Please enter your TCP port number\n");
scanf("%hu", &portNumber);
int choice = 1;
printf("\n%s\n", username);
printf("%hu\n", portNumber);
printf("%d\n", choice);
printf("%s", iP);
serverMenu(choice,username,iP)
}
受欢迎的需求,服务器菜单。到目前为止,这是我的整个文件
int serverMenu(int task, char *username, char *ipA){
printf("Successfully logged on as");
if(task == 1){
if(size != CAP){
printf("Successfully logged on as");
strcpy(chatroom[size].username, username);
strcpy(chatroom[size].ipAdress, ipA);
//chatroom[size].portNumber = pN;
size++;
printf("Successfully logged on as");
}
else{
printf("Sorry, there are no available spots in the chat room\n");
}
}
return 0;
}
答案 0 :(得分:2)
这是问题:
strcpy(chatroom[size].ipAdress, ipA);
在此次通话之前,您尚未为chatroom[size].ipAdress
分配内存。
此外,在您之前的编辑中,您有
char iP[20];
strcpy(iP, "aasdas");
现在你有了
char *iP;
strcpy(iP, "aasdas");
第二种形式不对。您必须先为iP
分配内存,然后才能使用strcpy
。