C弦指针

kua*_*uan 3 c

为什么sscanf()不能将字符串写入char*s?我初始化为NULL,因为我不想要未初始化的变量.

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

int main()
{

    char* t = "I am a monkey";
    char *s = NULL;
    sscanf(t, "%s",s);
    printf("%s\n",s);


}
Run Code Online (Sandbox Code Playgroud)

Dyl*_*kby 9

该行char *s = NULL创建一个保存字符内存地址的变量.然后它将该内存地址设置为零(NULL地址为零).

然后该行sscanf(t, "%s",s);尝试将该内容写入t该位置的字符串s.这将是段错误,因为您的进程无法访问地址零.

你的直觉很好,以避免未初始化的变量,但你交换这个未分配的指针!

通过声明:通过在堆栈(或堆)上为s分配一些空间来解决此问题:

char s[STRING_LENGTH];
Run Code Online (Sandbox Code Playgroud)

哪里STRING_LENGTH#defined要要分配然而,许多字符.这会分配一块内存来保存以null结尾的字符数组,并设置s为第一个字符的地址