fscanf()在字符指针中放了什么?

fscanf()在字符指针中放了什么?,c,string,scanf,C,String,Scanf,如果我有档案 仅包含以下内容的f1.txt stringhere 代码(想象fp是一个文件指针,指向f1.txt,在r模式下打开) 从fscanf()存储到数据中的是什么?它是否将只读内存中的字符串文本分配给数据?从文件中读取的字符串复制到malloc调用分配的动态内存中,并由数据指向 基本上,您将拥有如下内容(地址是凭空提取的,并不代表任何真实的平台): 此特定操作不涉及字符串文本或只读内存 它将字符串复制到数据,假设数据足够大,可以容纳它。这意味着您应该指定要读取的字符串的最大长度,否则数

如果我有档案

仅包含以下内容的f1.txt

stringhere
代码(想象
fp
是一个
文件
指针,指向
f1.txt
,在
r
模式下打开)


fscanf()
存储到
数据中的是什么?它是否将只读内存中的字符串文本分配给
数据

从文件中读取的字符串复制到
malloc
调用分配的动态内存中,并由
数据
指向

基本上,您将拥有如下内容(地址是凭空提取的,并不代表任何真实的平台):


此特定操作不涉及字符串文本或只读内存

它将字符串复制到
数据
,假设
数据
足够大,可以容纳它。这意味着您应该指定要读取的字符串的最大长度,否则
数据
可能会溢出。您能告诉我它是否会使
数据
指向只读内存中的字符串文字吗?它不会。C要求程序员自己管理内存。是的。当您传递的不是一个指向字符串的指针(即,
char**
),而是一个字符串(
char*
),您希望它怎么做?它不能修改您传递给它的指针的地址。@RussellBorogove那么您对使用它从文件中读取字符串有什么建议?在我的实际代码中,我为格式说明符指定了一个长度说明符。从我在问题部分的评论来看:我认为只有由双引号字符串初始化的
char*
才指向只读内存吗?@CSStudent:只有当平台将字符串文本放入只读内存时;并非所有人都这样做。
char *data = malloc(MAX_STR_LEN);
fscanf(fp, "%s", data);
Item          Address               0x00 0x01 0x02 0x03
----          -------               ---- ---- ---- ----
data          0x7ff84000            0x7f 0xff 0xf0 0x00
...
"stringhere"  0x7ffff000             's'  't'  'r'  'i'
              0x7ffff004             'n'  'g'  'h'  'e'
              0x7ffff008             'r'  'e' 0x00 0x??