通过C中的char指针循环

时间:2014-02-05 21:36:38

标签: c pointers

我正在编写一个函数,我在其中打开一个文件,然后逐行读取,然后将文件中的各个字符写下到另一个文件。

就像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.
    }
}

5 个答案:

答案 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