hanghanga 发表于 2023-11-13 22:45:09

大家帮我看看为什么报错啊

在输入名字后会报错:Segmentation fault
请问怎么修改啊,就是用指针的方法,不用注释的方法。
#include <stdio.h>

int main(void)
{
    const char *name = NULL;
    // char name;
    printf("What's your name:");
    scanf("%s", name);
    printf("Your name is %s\n", name);

    return 0;
}

isdkz 发表于 2023-11-13 22:45:21

问题出在你使用了指针变量 name ,但没有为其分配内存空间。当你使用 scanf 函数尝试将输入的字符串存储到 name 指向的位置时,由于 name 指向的是空地址,所以会导致Segmentation fault错误。

要解决这个问题,你可以使用动态内存分配函数 malloc 为 name 分配内存空间。修改代码如下:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    const char *name = (char *)malloc(1024 * sizeof(char)); // 为name分配内存空间
    if (name == NULL) {
      printf("内存分配失败\n");
      return 1;
    }
   
    printf("What's your name:");
    scanf("%s", name);
    printf("Your name is %s\n", name);

    free(name); // 释放动态分配的内存空间

    return 0;
}


在这个修改后的代码中,我们使用 malloc 为 name 分配了1024个 char 大小的内存空间。并且在程序结束时使用 free 函数释放了动态分配的内存空间,以避免内存泄漏问题。

Mike_python小 发表于 2023-11-13 22:46:06

你的代码中存在一个问题:你将指针name初始化为NULL,然后尝试通过scanf函数将输入的字符串存储到该指针指向的地址,这将导致段错误(Segmentation fault)。

要解决这个问题,你需要为指针name分配足够的内存空间来存储输入的字符串。下面是修改后的代码:


#include <stdio.h>
#include <stdlib.h>

int main(void) {
    const int maxNameLength = 1024;
    char *name = (char *)malloc(maxNameLength * sizeof(char)); // 分配内存空间
    if (name == NULL) {
      printf("Failed to allocate memory\n");
      return -1;
    }

    printf("What's your name:");
    scanf("%s", name);
    printf("Your name is %s\n", name);

    free(name); // 释放内存空间

    return 0;
}


在修改后的代码中,我们使用了malloc函数来动态分配name指针所需的内存空间,并通过sizeof(char)计算每个字符占用的内存大小。如果动态内存分配失败,我们会检查name是否为NULL,并在出错时打印错误信息。

最后,记得在程序结束前使用free函数释放动态分配的内存空间,以防止内存泄漏。

希望这个修改后的代码能够解决你的问题。如果还有其他问题,请随时提问。

hanghanga 发表于 2023-11-13 22:58:55

isdkz 发表于 2023-11-13 22:45
问题出在你使用了指针变量 name ,但没有为其分配内存空间。当你使用 scanf 函数尝试将输入的字符串存储到...

谢谢。刚才试了一下,吧第6行的const去掉就可以运行了,不然会报错
页: [1]
查看完整版本: 大家帮我看看为什么报错啊