当前位置:  开发笔记 > 编程语言 > 正文

C弦指针

如何解决《C弦指针》经验,为你挑选了1个好方法。

为什么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为第一个字符的地址



1> Dylan Kirkby..:

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

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

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

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

char s[STRING_LENGTH];

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

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有