c char指针赋值

时间:2013-05-20 14:00:40

标签: c pointers char variable-assignment

我在为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';

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

1 个答案:

答案 0 :(得分:4)

您的代码完美无瑕。从给定输入文件开始,基本情况如下:

  

ABCD

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

  

ABCD
ABCD

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

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


  

> I know, that the line P [I] = 'A';不起作用,

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

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

  • 这不是你在这里做的。您正在使用char *p访问该数组并更改char的{​​{1}} 'a'
  

'A'

  • 实际上fgets()会为您提供两件事,它会填充并“返回”您的数组(> p needs to be a char* because fgets() returns that.),并且还会向您填充的数组返回line。所以不,你根本不需要使用char *,相同的代码在没有指针的情况下工作:


p