当我有一个未初始化的指针时,我无法进入它,因为没有内存分配位置!
当我有一个指向char类型变量的指针并且我想用%s放入它时,程序允许我放置两个字符(2个字节)以及更多,这会给我一个错误。
我的问题是,当char只能容纳一个字节时,为什么可以将它放入两个字母?程序不应该落在两个字母上吗?
答案 0 :(得分:2)
这可能与对齐有关。如果char变量后面有多字节类型,则中间可能存在少量未使用的字节,但您不能依赖它,因为它显然是未定义的。
我建议使用valgrind
检查内存问题,而不是依赖观察。
答案 1 :(得分:1)
据我了解,这是未定义的行为。写入不指向已分配内存的指针可能会起作用或可能会崩溃。我会考虑代码错误,即使它没有崩溃前两个字符。
答案 2 :(得分:0)
我认为你的程序的行为是由于你没有初始化 指针与内存中的任何地址块。 默认情况下,指针可能有或没有有效的内存地址。
试试这个:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *_str = malloc(x); // x is the number of bytes that you want to point to.
fgets(_str, x, stdin);
printf("\n_str = %s", _str);
return 0;
}