gpt4 book ai didi

c - 字符串的数组内存分配

转载 作者:行者123 更新时间:2023-11-30 19:42:47 27 4
gpt4 key购买 nike

我使用数组分配方法编写了简单的字符串程序。我已经分配了 10 个字节的字符数组,但是当我给出输入时,程序接受大于 10 个字节的输入字符串。仅当我提供大约 21 个字符的输入字符串时,我才会出现段错误。为什么当我的输入超出分配的数组限制时没有段错误?

程序:

#include <stdio.h>
#include <string.h>

void main() {

char str[10];

printf ("\n Enter the string: ");
gets (str);
printf ("\n The value of string=%s",str);
int str_len;
str_len = strlen (str);
printf ("\n Length of String=%d\n",str_len);


}

输出:

Enter the string: n durga prasad

The value of string=n durga prasad
Length of String=14

正如你所看到的,字符串长度显示为14,但我只分配了10个字节。长度怎么可能大于我分配的大小?

最佳答案

请不要使用 gets() 它会遇到缓冲区溢出问题,进而调用 undefined behaviour .

Why there is no segmentation fault when my input exceed allocated my array limit?

一旦您的输入超出分配的数组大小(即 9 个有效字符 + 1 个空终止符),紧接着的下一次访问数组位置将变为非法并调用 UB。段错误是 UB 的副作用之一,但它不是必须的。

解决方案:使用fgets()相反。

关于c - 字符串的数组内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30730580/

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