-1

我在为 char 指针赋值时遇到问题。

#include<stdio.h>

int main(int argc, char* argv[]){
    char line[200], *p, q;
    int i=0;
    FILE* f=fopen(argv[1], "r");
    for( ; ;){
            p=fgets(line, 200, f);
            if (p==NULL) break;
            printf("%s", p);
            i=0;
            while(p[i]!='\n'){
                    if (p[i]=='a') p[i]='A';
                    i++;
            }
            printf("%s", p);

    }
}

我知道,这条线

p[i]='A';

不起作用,但这就是我基本上需要做的,将 a 替换char*char. p必须是 achar*因为fgets()返回。我的问题是我是否可以char*以某种方式将 a 转换为 a char [],或者是否有办法将值分配给char*

4

1 回答 1

4

您的代码按原样完美运行。从一个基本案例开始,给定一个输入文件,例如:

A B C D

和 1 个换行符(“d”后的“输入”键)您的程序输出到控制台:

abcd
abcd

这正是你编码它的方式。它不会Abcd回文件,因为您打开文件只是为了读取,而不是写入。希望那不是你想要的。

注意:如果您的文件中没有换行符,或者它从一开始就超过 200 个字符,您可能会看到缓冲区溢出,这可能会导致它看起来好像不起作用。因此,再次从我展示的一个非常基本的文件开始,并确保您的代码与您在此处发布的内容完全相同。


> I know, that the linep[i]='A'; 不工作,

  • 不正确,您可以使用指向数组的指针p或数组本身line来访问和更改元素。fgets()将前 200 个字符(或直到第一个换行符)存储到line并返回您分配给它的指针p,或者将用于访问或更改数组中的字符。

> I ... need to ..., replace a char* with a char

  • 那不是你在这里做的。您正在使用char *p访问数组并更改char 'a'for'A'

> p needs to be a char* because fgets() returns that.

  • 实际上fgets()给了你两件事,它填充并“返回”你的数组 ( line),它还返回 achar *到你填充的数组。所以不,你根本不需要使用p,在下面,相同的代码根本不需要指针:


int main(int argc, char* argv[]){
    char line[200];
    int i=0;
    FILE* f=fopen("test.txt", "r");
    for( ; ;){
            if (fgets(line, 200, f)==NULL) break;
            printf("%s", line);
            i=0;
            while(line[i]!='\n'){
                    if (line[i]=='a') line[i]='A';
                    i++;
            }
            printf("%s", line);

    }
    return 0;
}
于 2013-05-20T14:36:29.293 回答