Cześć,
mam następujący problem, nie wiem dlaczego po wyjściu z funkcji getname, nie mogę wypisać nic z tablicy names. Wydaje mi się, że modyfikacja tablicy names w funkcji powinna być taka sama w mainie. Printf użyty w funkcji dobrze wszystko wypisuje, a ten na zewnątrz nic, albo dostaję Segmentation fault. Poniżej kod całego programu. Nie wiem na ile to ma znaczenie, ale kompiluję to na wirtualnej maszynie na Ubuntu.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include <string.h>
#include <errno.h>
#define MAX_NAMES 200
#define MAX_NAME_LENGTH 40
#define RANDOM_FILENAME "names_random.txt"
#define ERR(source) ( perror(source), fprintf(stderr, "%s:%d", __FILE__, __LINE__), \
exit(EXIT_FAILURE) )
// call: ./program -n file.txt (every name in a different line)
// result: printing all the names
void getnames(FILE* f, char ** names, int * numberOfNames);
int main(int argc, char** argv)
{
char c;
int numberOfNames = 0;
char* names[MAX_NAMES];
FILE* f;
int n_count = 0, e_count = 0, b_count = 0;
while ( (c = getopt(argc, argv, "n:e:b:")) != -1)
{
switch(c)
{
case 'n':
n_count++;
if (n_count > 1)
ERR("Too many -n options");
if (e_count > 0)
ERR("-e option before -n option");
if (b_count > 0)
ERR("Cannot use -b option with the -n option");
if ( (f = fopen(optarg, "r")) != NULL)
{
getnames(f, names, &numberOfNames);
printf("%s\n", names[0]);
if (fclose(f) != 0) ERR("closing names file failed");
}
else
ERR("cannot open names file parsed as a -n argument");
break;
case 'e':
break;
case 'b':
break;
case '?':
break;
}
}
return EXIT_SUCCESS;
}
void getnames(FILE* f, char ** names, int* numberOfNames)
{
char singleName[MAX_NAME_LENGTH];
while (fgets(singleName, MAX_NAME_LENGTH, f) != NULL)
{
names[*numberOfNames] = singleName;
printf("%s", names[(*numberOfNames)++]);
}
}