Я немного новичок в C здесь и просто хотел понять несколько вещей о указателях, указателях на указатели и строки. Вот что я записал до сих пор:C Функция Возврат указателя к указателю
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Return a pointer to an array of two strings. The first is the characters
of string s that are at even indices and the second is the characters from
s that are at odd indices */
char **parity_strings(const char *s) {
int len = strlen(s);
char **lst = malloc(sizeof(char*)*2);
for(int i=0; i<2; i++){
lst[i] = malloc(sizeof(char)*(len/2));
}
for(int i=0; i<len; i++){
if(i%2==0){
(*lst)[0]=s[i];
}else{
(*lst)[1]=s[i];
}
}
return lst;
}
int main(int argc, char **argv) {
char **r = parity_strings(argv[1]);
printf("%s %s %s", r[0], r[1], argv[1]);
return 0;
}
Так что я хочу, чтобы динамически выделять память, необходимую как для строкового массива, а сами строки. Я хочу знать, есть ли у меня правильная идея здесь, желая вернуть указатель типа char**
, который указывает на два указателя типа char*
, а затем оттуда доступ к каждой строке char
.
Мой выход не такой, как ожидалось. Я относительно новичок в C, поэтому есть вещи, о которых я все еще узнаю.
Любая помощь будет оценена, спасибо.
'LST [я] = таНос (SizeOf (Char) * (LEN/2));' 1) это будет слишком мало выделяться, если длина строки окажется нечетной. 2) вам также потребуется место для двух '' \ 0'' терминаторов в строках результата. 2a) вам нужно выполнить нулевое завершение результирующих строк. 3) '(* lst) [0] = s [i];' это просто неправильно. Ваше намерение здесь? – wildplasser
Строки C представляют собой массивы с нулевым завершением, и похоже, что вы забыли обработать эти значения ... –
@wildplasser Я изменил его на '* (lst [0]) = s [i]'. Я пытаюсь получить доступ к первому массиву 'char' – user2965071