Как заменить один символ в массиве символов? - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь выяснить, как заменить один символ в массиве символов.Я просто так зациклен на том, как это сделать.

int addInsert (char *editing_buffer, char to_insert, int pos){

   editing_buffer[pos-1] = to_insert;

}

int main() {
    char string[5] = "ABCDE";
    int r = addInsert(string, "Z", 3);
}

Я пытался сделать это так, но это отображается как нечитаемый символ.Это мой первый раз, когда я использую C, поэтому я все еще не совсем уверен, что делаю.

Ответы [ 3 ]

0 голосов
/ 24 марта 2019

1) Неправильная инициализация массива символов:

char string[5] = "ABCDE";

Вам не хватает места для завершающего символа NUL ('\ 0').

Это

char string[6] = "ABCDE";

или

char string[] = "ABCDE";

исправляет эту проблему.

2) (предполагается, что addInsert () должен быть editor_insert_char ()) Вы передаете неправильный тип второму параметру вашей функции. «Z» - это строка (массив символов), но ваша функция ожидает один символ.

Вызовите свою функцию следующим образом, используя single quotes.:

int r = editor_insert_char(string, 'Z', 3);
0 голосов
/ 24 марта 2019

основная проблема заключается в том, что с помощью двойных кавычек вы передаете символ Z в виде строкового литерала, то есть массива символов. Поскольку editing_buffer является массивом символов, когда вы хотите заменить один символ другим, вам придется передавать его как один символ, что означает, что вы должны использовать одинарные кавычки.

"Z" -->  String literal i.e in memory ['Z', '\0']  
'Z' -->  Character i.e ASCII value of Z

Таким образом, вы пытались заменить char на char*.

0 голосов
/ 24 марта 2019

ваша строка инициализатора для массива символов слишком длинная, если вы определяете строку символов [5], вы можете использовать только 4 символа или меньше, используйте строку символов [5] = "ABCD"; вместо этого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...