Указатель 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;
}
Другие вопросы по тегам