Так что я давно борюсь с (я думаю, простой) проблемой со строками в C.
Я хочу создать список char
указателей и выделить malloc()
каждого из них несколькопамять для заполнения одним случайным символом. Наконец, я хочу отсортировать их и создать новую строку с strcat()
.
Так что в этом коде показана только первая часть с некоторыми тестовыми функциями:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main(int argc, char* argv[]) {
if (argc < 2) {
printf("Error, too few arguments!\n");
return 0;
}
// initialize random generator
srand((unsigned int)time(NULL));
const int a = atoi(argv[1]);
char *array[a];
//--------------- generate random characters ----------------------------------------
for (int i = 0; i < a; i++) {
int r = rand() % 30 + 1;
printf("%d ", r);
array[i] = (char*)malloc(a + 1 * sizeof(char));
sprintf(array[i], "%ls", &r);
*(array[i] + 1) = '\0';
}
putchar('\n');
printf("%d %d %d \n", *array[0], *array[1], *array[2]);
char *array_2 = (char*) malloc(a * sizeof(char));
strcat(array_2, *array);
strcat(array_2, *(array + 1));
strcat(array_2, *(array + 2));
printf("Address array_2[0] : %p , value: %d \n", array_2, *array_2);
printf("Address array_2[1] : %p , value: %d \n", &array_2[1], array_2[1]);
printf("Address array_2[1] : %p , value: %d \n", &array_2[2], array_2[2]);
// produces a lot a garbage and crap
printf("array_2 with string : %s :\n", array_2);
// rest of the code omitted because it is irrelevant to the issue
return 0;
}
Итак, чтоЯ не понимаю: печать символов отдельно работает нормально. Если я хочу напечатать все это как строку, я получу только зашумленную строку символов. Как я могу реализовать идею?
Честно говоря, у меня не возникает проблемы - если я создаю массив символов, такой как char array[4] = {'a','b','c', '\0'}
, я могу напечатать все это с помощью "% s" ... Но в моемПрограмма почти такая же, но не работает.
Я был бы рад, если бы кто-нибудь дал мне подсказку!