gpt4 book ai didi

c - 为什么即使未指定大小,scanf 和 malloc 到 char 指针也能工作?

转载 作者:行者123 更新时间:2023-12-04 09:39:52 25 4
gpt4 key购买 nike

我正在刷新我的 C 技能。我正在使用 char *s 并使用 malloc 为 s 分配内存。然后使用 scanf,我读取了 s 的输入。但我的问题是我没有指定内存块的大小。但是程序有效。如何为输入字符串的任意长度分配内存? scanf 只是递增指针并将数据写入该位置吗?

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

int main() {
char *s;
s = (char *) malloc(sizeof(s)); //I did not specify how much like malloc(sizeof(s) * 128)
if (s == NULL) {
fprintf(stderr, "\nError allocating memory for string");
exit(1);
}
scanf("%s", s);
puts(s);
free(s);
return 0;
}

/*
Input:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Output:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
*/

最佳答案

对于 char *s;sizeof(s)sizeof(char *) 相同,它是 4 或 8,具体取决于关于您使用的是 32 位机器还是 64 位机器。

如果您使用的是 32 位框,那么您可以存储 3 个字符加上空的“字符串结尾”字符。如果您储存更多,它可能会爆炸。

关于c - 为什么即使未指定大小,scanf 和 malloc 到 char 指针也能工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13023515/

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