为什么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)
该行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为第一个字符的地址
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |