Siema, umiem w c++, a na studia musze umieć w C. Mam zadanie żeby zaalokować N stringów. Mam taki program napisany w C++, ale tak jakbym pisał go w C, tylko, że z referencją zamiast pointerem.
int main()
{
int n = 5;
static const int MAX_STRING_LENGTH = 32;
char** strings = (char**)malloc(n * sizeof(char*));
for(int i = 0; i < n; ++i) {
char*& string = strings[i];
string = (char*)malloc(MAX_STRING_LENGTH);
const char charset[] = "ABCDEFGHIJKLMNOPRSTUWXYZ";
for(int j = 0; j < MAX_STRING_LENGTH - 1; ++j) {
int index = rand() % (int)(sizeof charset - 1);
string[j] = charset[index];
}
string[MAX_STRING_LENGTH - 1] = '\0';
printf("%s\n", string);
}
for(int i = 0; i < n; ++i) {
free(strings[i]);
}
free(strings);
return 0;
}
No i tutaj wszystko lux, działa. Ale, że w C nie ma referencji, to char*& string
musze zamienić na char** string
. Jedna gwiazdka, bo to string, druga gwiazdka, bo chce "referencje" do tego stringa. No i ogólnie wtedy jak chce pisać do tego stringa, to musze gwiazdkę przed stringiem żeby zamiast pisać na wskaźnik do stringa, to piszę do stringa.
int main()
{
int n = 5;
static const int MAX_STRING_LENGTH = 32;
char** strings = (char**)malloc(n * sizeof(char*));
for(int i = 0; i < n; ++i) {
char** string = &strings[i];
*string = (char*)malloc(MAX_STRING_LENGTH);
const char charset[] = "ABCDEFGHIJKLMNOPRSTUWXYZ";
for(int j = 0; j < MAX_STRING_LENGTH - 1; ++j) {
int index = rand() % (int)(sizeof charset - 1);
*string[j] = charset[index];
}
*string[MAX_STRING_LENGTH - 1] = '\0';
printf("%s\n", *string);
}
for(int i = 0; i < n; ++i) {
free(strings[i]);
}
free(strings);
return 0;
}
Moim okiem wygląda to dobrze, ale program wywala się w drugiej iteracji pętli wewnętrznej.
Co zrobiłem tutaj źle?