【问题标题】:segmentation fault issue with string字符串的分段错误问题
【发布时间】:2014-10-29 17:36:13
【问题描述】:

我正在尝试制作一个简单的聊天程序,但遇到了分段错误, 我的理解类似于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;
}

【问题讨论】:

  • up to 20 characters long - 不,最多 19 个字符。
  • 我想你可能想看看你的 serverMenu 函数是否有问题
  • 这是我为数组输入的随机整数。这不是重点,也不会抛出错误。和皮革脸,它没有达到 iP 的打印声明,所以它没有进入 serverMeny
  • 哪一行是段错误
  • 像魅力一样工作 (demo)。将\n 添加到最后一个printf 以强制它在 输入serverMenu(choice,username,iP) 之前完成打印(顺便说一句,您在那里缺少分号)。

标签: c string segmentation-fault arrays


【解决方案1】:

这是问题所在:

    strcpy(chatroom[size].ipAdress, ipA);

在调用之前,您还没有为chatroom[size].ipAdress 分配内存。

另外,在您之前的编辑中,您有

char iP[20];
strcpy(iP, "aasdas");

现在你有

char *iP;
strcpy(iP, "aasdas");

第二种形式不对。您需要先为iP 分配内存,然后才能使用strcpy

【讨论】:

  • 所以这是抛出错误。如何为此分配内存?我是 C 和 java 的新手
  • 我在一切之上初始化结构?
  • OHHHH 我看到了这个问题。我正在设置 *iPaddress 但我没有给它尺寸。
猜你喜欢
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多