如果我有一个文件什么fscanf()放入字符指针?
f1.txt只包含以下
stringhere
和代码(想象fp
是FILE
指针f1.txt
,在r
模式打开)
char *data = malloc(MAX_STR_LEN);
fscanf(fp, "%s", data);
什么是从fscanf()
存储到data
?它是否将只读存储器中的字符串文字分配给data
?
如果我有一个文件什么fscanf()放入字符指针?
f1.txt只包含以下
stringhere
和代码(想象fp
是FILE
指针f1.txt
,在r
模式打开)
char *data = malloc(MAX_STR_LEN);
fscanf(fp, "%s", data);
什么是从fscanf()
存储到data
?它是否将只读存储器中的字符串文字分配给data
?
从文件中读取的字符串被复制到由malloc
调用分配的动态内存中,并由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??
没有字符串文字或只读存储器参与这个特定的操作。
从我在问题部分的评论:我是否认为只有被双引号字符串初始化的'char *'指向只读内存? – 2014-08-27 15:50:19
@CSStudent:只有当平台将字符串文字放入只读存储器时,不是全部。 – 2014-08-27 16:06:31
它将字符串复制到'data'中,假设'data'的大小足以容纳它。这意味着您应该指定要读取的字符串的最大长度,否则“数据”可能会溢出。 – michaelmeyer 2014-08-27 15:41:30
你能告诉我,如果它确实或不会使'data'指向只读内存中的字符串文字? – 2014-08-27 15:43:17
它没有。 C要求程序员自己管理内存。 – HuStmpHrrr 2014-08-27 15:43:57