Я пытаюсь изучить некоторые C, и у меня есть немного проблем с манипулированием строками. Пытаясь узнать их, я решил создать простой испанский глагол-конъюгатор, но я застреваю. Прямо сейчас я просто пытаюсь удалить последние 2 не '\ 0' строки, а затем добавить к ней 'o'. (Например, для ввода «hablar» я хочу, чтобы он выводил «hablo»). Вот мой код. Я старался быть слишком подробным в своих комментариях, чтобы надеяться помочь понять, что я теряю концептуально.Получение «ошибки сегментации» при запуске простой программы управления строкой
#include <stdio.h>
#include <string.h>
/* Reimplemented the length function of a string for practice */
int len(char *);
void conjugatePresentAr(char *, char *);
int len(char *arr){
int l = 0;
while (*arr++ != '\0'){
l++;
}
return l;
}
void conjugatePresentAr(char *verb, char *output){
output = verb;
int i = len(verb);
while (output < (verb + i -2)){
*output = *verb;
output++;
verb++;
}
*output = 'o';
output++;
*output = '\0';
}
int main(){
char input[20];
scanf("%s", input);
printf("%s\n",input);
char conjugated[20];
conjugatePresentAr(input, conjugated);
printf("%s\n", conjugated);
return 0;
}
Для любого входа я получаю Segmentation Fault: 11. Я потратил приличное количество времени, глядя здесь и читать с помощью книг на указателях, но не вполне могу показаться, чтобы выяснить, что я Мессинг , Я ценю вашу помощь!
Если у вас есть segfault, вы можете увидеть, где в коде, который он с ошибкой (точные данные зависят от вашей платформы, о которой вы нам не сказали, но в целом ее запуск под отладчиком приведет вас там). – Useless
@ dacrovinunghi благодарит брата. Никогда бы не догадался, что мой код сосет. Вместо того, чтобы публиковать этот забавный комментарий, на самом деле было бы более полезно объяснить, почему это плохо/почему он не нужен. Я не просто сбрасывал эту штуку, как 10 минут. Верьте или нет, я на самом деле думал и многое изменил, но я, очевидно, не понимаю понятия. –
показывает отсутствие понимания различий между указателем (хранилищем, используемым для хранения адресов памяти), содержимым указателя (конкретным адресом памяти) и содержимым, которое указывает указатель (содержимое этого адреса памяти) – Speed8ump