int main(){
char* str = "bake", *temp = str;
char alpha [] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
for (int i = 0 ; temp[i] != '\0'; i++) {
for (int j = 0; alpha[j] != '\0'; j++) {
temp[i] = alpha[j];
printf("%s\n",temp);
}
temp = str;
}
return 0;
}
Почему я пытаюсь заменить персонажа в той или иной локации, она попадает ко мне? я хочу, чтобы это напечатало меня так
i = 0 (index 0 he change only the first char).
aake
bake
cake
dake
....
i = 1(index 1 he change only the second char).
bake
bbke
bcke
bdke
....
я не понимаю почему temp[i] = alpha[j]
не работает... что мне нужно сделать, чтобы изменить символ.
большое спасибо за помощь
![введите здесь описание изображения][1] [1]: https://i.stack.imgur.com/v0onF.jpg
литеральная (константная) строка не может быть изменена. Обратите внимание, что ваш алгоритм пытается заполнить temp последним ненулевым символом альфы, поэтому zzzz...zz
*temp = str
выглядит очень странно и не соответствует тому, как temp
используется позже. Вы хотели использовать char *temp = strdup(str);
?
@бруно, как я могу измениться?
Re "alpha[j] != '\0'
", '\0'
нигде нет в alpha
@arieldomchik что ты хочешь сделать?
Этот последний мой комментарий объясняет ошибку, которую вы получили
Пожалуйста, исправьте форматирование и включите сообщение об ошибке в виде текста (Вы также можете включить скриншот, но не заставляйте нас искать скриншот, когда в этом нет необходимости)
@ikegami тот факт, что строка не может быть изменена, предшествует отсутствующему нулевому символу в альфа-канале.
я добавляю снимок экрана, вы видите, где я получил ошибку...
@arieldomchik, как уже было сказано, вы не можете изменить литеральную строку, поэтому вы не можете изменить temp[i]
@bruno, так у тебя есть способ сделать это?
@arieldomchik как уже предложил можно сделать char str[] = "bake"; char * temp = str;
, а вот другие проблемы придут
Как сказано в комментариях, в вашем коде есть пара ошибок. Прежде всего, как сказал bruno, вы не можете изменить литеральную строку. Во-вторых, когда вы пишете *temp=str, вы говорите, что «указатель temp теперь указывает на тот же адрес, что и str», короче говоря, делая это, если вы изменяете массив в temp, вы также изменяете массив в str, и наоборот, потому что они одинаковые.
Ниже у вас есть возможное решение с использованием malloc для создания нового массива во temp и strcpy для копирования str во temp после каждого внешнего цикла.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char str[]= "bake",*temp;
temp=malloc((strlen(str)+1)*sizeof(char));
strcpy(temp,str);
char alpha [] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
for (int i = 0 ; temp[i] != '\0'; i++) {
for (int j = 0; alpha[j] != '\0'; j++) {
temp[i] = alpha[j];
printf("%s\n",temp);
}
strcpy(temp,str);
}
return 0;
}
Во-первых, изменение строки, созданной строковым литералом, является поведением undefined.
char *str = "bake";
должно бытьchar str[] = "bake";