我在为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*
?
答案 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