Указатель c символьным указателем
У меня проблемы с присвоением значения указателям на символы.
#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*
?
1 ответ
Ваш код работает отлично, как есть. Начните с основного случая, учитывая входной файл, такой как:
ABCD
И 1 перевод строки (клавиша "ввод" после "d") выводит ваша программа на консоль:
ABCD
Abcd
Это именно то, как вы это закодировали. Не напишет Abcd
вернуться к файлу, так как вы только открыли файл для чтения, а не для записи. Надеюсь, это не то, что вы хотели.
ПРИМЕЧАНИЕ: если у вас нет новой строки в вашем файле, или с начала прошло более 200 символов, вы, возможно, видите переполнение буфера, из-за которого может показаться, что он не работает. Итак, еще раз, начните с очень простого файла, как я показал, и убедитесь, что ваш код именно то , что вы опубликовали здесь.
> I know, that the line
р [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;
}