gpt4 book ai didi

c - 为什么此程序不适用于大于 25 个字符的输入?

转载 作者:行者123 更新时间:2023-11-30 19:54:15 24 4
gpt4 key购买 nike

这是一个非常适合输入的程序:“问题”

但停下来:“这就是问题,这就是问题,这就是问题”

为什么?

#include <stdio.h>

int main()
{
char *p;
gets(p);
puts(p);
return 0;
}

是否存在内存保护问题?

最佳答案

您缺少分配内存、使用 gets() 读取数据,因为 char * p 只是一个指针,指向随机地址。

这会引发未定义的行为。即使只读取 1 个字符,任何事情都可能发生。

事实是,程序在少于 26 个字符时不会崩溃,这只是运气不好。

您可以通过例如更改来提供内存

char * p;

成为

char str[42] = {0}; /* = {0} initializes the array to all `0`s. */
char * p = str;

根据 urzeit 的评论:这使得 p 指向一个 42 个字符的数组,该数组本身能够容纳一个所谓的 41 个字符的“字符串”。第 42 个字符被保留以保存 0 终止符,表示“字符串”的结尾。

<小时/>

注意:gets() 是邪恶的,因为程序员无法告诉函数缓冲区传递给 gets() 的字符数code> 可以保存。请改用 fgets()

<小时/>

顺便说一句:int main(void) 应该返回一个int

关于c - 为什么此程序不适用于大于 25 个字符的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18556068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com