为什么sscanf()不能将字符串写入char*s?我初始化为NULL,因为我不想要未初始化的变量.
#include#include int main() { char* t = "I am a monkey"; char *s = NULL; sscanf(t, "%s",s); printf("%s\n",s); }
Dylan Kirkby.. 9
该行char *s = NULL
创建一个保存字符内存地址的变量.然后它将该内存地址设置为零(NULL
地址为零).
然后该行sscanf(t, "%s",s);
尝试将该内容写入t
该位置的字符串s
.这将是段错误,因为您的进程无法访问地址零.
你的直觉很好,以避免未初始化的变量,但你交换这个未分配的指针!
通过声明:通过在堆栈(或堆)上为s分配一些空间来解决此问题:
char s[STRING_LENGTH];
哪里STRING_LENGTH
是#defined
要要分配然而,许多字符.这会分配一块内存来保存以null结尾的字符数组,并设置s
为第一个字符的地址
该行char *s = NULL
创建一个保存字符内存地址的变量.然后它将该内存地址设置为零(NULL
地址为零).
然后该行sscanf(t, "%s",s);
尝试将该内容写入t
该位置的字符串s
.这将是段错误,因为您的进程无法访问地址零.
你的直觉很好,以避免未初始化的变量,但你交换这个未分配的指针!
通过声明:通过在堆栈(或堆)上为s分配一些空间来解决此问题:
char s[STRING_LENGTH];
哪里STRING_LENGTH
是#defined
要要分配然而,许多字符.这会分配一块内存来保存以null结尾的字符数组,并设置s
为第一个字符的地址