带有char指针的字符串

时间:2014-07-23 06:19:38

标签: c string pointers

当我有一个未初始化的指针时,我无法进入它,因为没有内存分配位置!

当我有一个指向char类型变量的指针并且我想用%s放入它时,程序允许我放置两个字符(2个字节)以及更多,这会给我一个错误。

我的问题是,当char只能容纳一个字节时,为什么可以将它放入两个字母?程序不应该落在两个字母上吗?

3 个答案:

答案 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;
}