2014-08-27 88 views
1

如果我有一个文件什么fscanf()放入字符指针?

f1.txt只包含以下

stringhere 

和代码(想象fpFILE指针f1.txt,在r模式打开)

char *data = malloc(MAX_STR_LEN); 
fscanf(fp, "%s", data); 

什么是从fscanf()存储到data?它是否将只读存储器中的字符串文字分配给data

+0

它将字符串复制到'data'中,假设'data'的大小足以容纳它。这意味着您应该指定要读取的字符串的最大长度,否则“数据”可能会溢出。 – michaelmeyer 2014-08-27 15:41:30

+0

你能告诉我,如果它确实或不会使'data'指向只读内存中的字符串文字? – 2014-08-27 15:43:17

+0

它没有。 C要求程序员自己管理内存。 – HuStmpHrrr 2014-08-27 15:43:57

回答

2

从文件中读取的字符串被复制到由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?? 

没有字符串文字或只读存储器参与这个特定的操作。

+0

从我在问题部分的评论:我是否认为只有被双引号字符串初始化的'char *'指向只读内存? – 2014-08-27 15:50:19

+1

@CSStudent:只有当平台将字符串文字放入只读存储器时,不是全部。 – 2014-08-27 16:06:31