переменной вы объявляете не является указателем; это на самом деле массив из шести указателей на символы (вот почему printf
не работает).Если вы хотите использовать массив символов, просто написать:
char R1[6];
Если вы хотите указатель обугленного, написать:
char *R1;
и инициализировать его как-то (возможно, с malloc
):
/*in main*/
R1 = malloc(6); /*six bytes for five chars +null terminator*/
Удостоверьтесь в завершении нулевой последовательности:
R1[5] = '\0';
После того, как у вас есть действительная, изменяемая * обугленная последовательность, вы можете назначить отдельные голец так же, как вы уже:
R1[3] = '4';
Однако, когда речь идет о назначении всей строки, вы хотите использовать strcpy функции вместо оператора =
:
/*R1 now contains the text "33333"*/
strcpy(R1, "33333");
* Когда вы пишете R1 = "33333"
, вы назначаете на указатель вместо к тексту он указывает. Поскольку "33333"
неизменен, вы не сможете назначить значения в своей строке, когда ваша строка является прямой ссылкой на нее.
Так что полная программа может выглядеть следующим образом: [? В чем разница между символом s \ [\] и символом \ * s в C]
char *R1;
int main(){
R1 = malloc(6);
R1[5] = '\0';
strcpy(R1, "33333");
printf("%s\n", R1);
R1[3] = '4';
printf("%s", R1);
free(R1);
return 0;
}
возможного дубликат (HTTP: // StackOverflow. com/questions/1704407/what-is-the-difference-between-char-s-and-char-s-in-c) – Fernando