strcpy делает указатель из целого числа без приведения

#arrays #c #char #scanf #strcpy

Вопрос:

Я пытаюсь вставить символ в определенную позицию в массив символов (char *peep), но каждый раз, когда я пытаюсь, я получаю ошибку strcpy

Текущий Код

 int main(){  char *peep = malloc(256);    int pos;  char character, charToStr[2];  charToStr[1] = '';   printf("nCharacter to insert: ");  scanf("%c", amp;character);  printf("Position to insert: ");  scanf("%d", amp;pos);  printf("nPeep becomesn%d:%c", pos,character);   charToStr[0] = character;  strcpy(peep[pos-1],charToStr);    printf("this is peep: n%d:%c",pos,peep[pos-1]);   }  

Я пытался использовать strncpy() безрезультатно и честно пробовал много других вещей

Комментарии:

1. strcpy ожидает указатель на символ в качестве своего первого аргумента, вы передаете символ.

2. я хочу, чтобы передаваемый персонаж находился в определенном месте, как бы я это сделал, если бы этот первый аргумент не был тем, что он есть?

3. peep[pos-1] = character; ? Хотя и не уверен, что вы действительно пытаетесь сделать, так как остальная часть peep все равно будет содержать данные мусора.

4. printf("this is peep: n%d:%c",pos,peep[pos]); и почему вы пытаетесь печатать в индексе pos pos-1 , когда задается индекс? Весь код действительно имеет очень мало смысла.

5. это была опечатка, спасибо за ваш 1-й комментарий

Ответ №1:

Посмотрите на подпись strcpy функции:

 char *strcpy(char *dest, const char *src);  

Как вы можете видеть, эта функция ожидает символьный указатель в качестве целевой строки.

Однако в вашем коде вы передаете функции простой символ. Это связано с тем, что вы разыменовываете строку в индексе [pos-1] .

Следовательно, вы должны использовать оператор амперсанд ( amp; ), чтобы передать адрес вашей целевой строки. Таким образом, изменение вашего strcpy вызова на strcpy(amp;peep[pos - 1], charToStr); заставит ваш код работать должным образом.