Я хочу изменить строку с помощью указателей. Я получаю ошибку сегментации! Есть идеи по этому поводу? Детали указаны в коде. Кстати, это правильный способ реализовать этот материал?Реверсивные строки с использованием массивов и указателей
Спасибо,
Gerhard!
МОЙ КОД:
void copy_and_reverse(char* output, char* input) {
int c = 0;
int len = 0;
char *begin;
char *last;
len = strlen(input);
len -= 1;
begin = input;
last = output;
for (c = 0; c < len; c += 1) {
last += 1;
}
len += 1;
for (c = 0; c < len; c +=1, begin += 1, last -= 1 {
temp = *begin;
*last = *begin; // Here is my problem. Why am I not allowed to access this storage? I have no Idea about that!
}
}
int main(int argc, char **argv) {
int i = 0;
int leng = 0;
char *input[999] = {0}; // input gets the string of the argument, the string should stay in the right order
char *output[999] = {0}; // output should get the reversed string
if (argc == 1) {
printf("Too few arguments.");
return -1;
}
for (i = 0; i < argc; i += 1, argv += 1) {
if (strlen(*argv) > 100) {
printf("Maximum string length exceeded.");
return -2;
}
}
argv -= i; //Unnecessary stuff
*argv += 1;
argv += 1;
argc -= 1;
for (i = 0; i < argc; i += 1, argv += 1) {
*input = *argv;
copy_and_reverse(*output, *input);
}
return 0;
}
Если это нравится входной сигнал этого входа [999] = {0}; вывод на выход [999] = {0}; .. Как я могу передать аргумент (string) в массив? Нет никакого шанса сделать это: * input = * argv; , больше, не так ли? – MrShow
О, да, вы можете, определяя ввод символов [999]; * input * на самом деле является (char *), поэтому вы можете рассматривать это как указатель. При использовании оператора [], например, ввода [3], это равнозначно делать * (ввод + 3). Кроме того, учтите точки @Mike S. поднимает !!! – kostas