我正在编写一个函数,我在其中打开一个文件,然后逐行读取,然后将文件中的各个字符写下到另一个文件。
就像fileInput有内容
一样one
fileOut应该有内容
o
n
e
这是我的代码,不确定为什么它不起作用
// Assume I have opened the file in the right modes
char *line = NULL; // Initial storage for storing lines
size_t len = 0; // Store the length (can I omit it?)
ssize_t read; // For getline
char *letter; // For storing the individual characters
while ((read = getline(&line, &len, fin)) != -1) {
// I believe by this I get the mem address of line in letter and
// then check it for end character
for (letter = line; *letter != '\0'; letter++) {
fprintf(fout, "%s\n", *letter);
// Now this will put the entire 'one'
// when I really want just o then n and then e.
}
}
答案 0 :(得分:3)
由于letter
已经是指针,因此您有几个选项。您可以告诉fprintf
您输出的是单个字符:
fprintf(fout, "%c\n", *letter);
或者,使用更多的方法,您可以告诉它输出只有一个字符的字符串:
fprintf(fout, "%.1s\n", letter);
要么适用于你的情况。
答案 1 :(得分:2)
变化:
fprintf(fout, %s\n", *letter);
为:
fprintf(fout, %c\n", *letter);
^^^
答案 2 :(得分:2)
您必须将其打印为char(%c
),而不是完整的字符串(%s
)。
答案 3 :(得分:2)
%c
是您希望在格式字符串中打印出char的内容。如果您使用%s
,则会尝试打印出整个字符串,这就是您所看到的。
答案 4 :(得分:1)
每次致电时,您都会尝试使用换行符(' \ n')打印字符串:
fprintf(fout, "%s\n", *letter);
但你的*字母属于 char 类型。 所以你需要打印这个:
fprintf(fout, "%c\n", *letter);
这一次,它将使用换行符(' \ n')打印下一行中的每个字符。 您的输出将是:
"○\ン\ NE \ n"
如您所见,每个角色后跟' \ n'这意味着:
o
n
e