繁体   English   中英

c char指针分配

[英]c char pointer 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*char p必须为char*因为fgets()返回该值。 我的问题是,是否可以将char*转换为char [] ,或者是否可以将值分配给char*

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

A B C D

并将程序输出到控制台的1个换行符(“ d”之后的“ enter”键):

A B C D
A B C D

正是您编码的方式。 不会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 'a'更改为'A'

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

  • 实际上, fgets()给您两件事,它填充并“返回”您的数组( line ),并且还向填充的数组返回一个char * 因此,不,您根本不需要使用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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM