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