Обработка указателей в нескольких функциях в C - PullRequest
0 голосов
/ 12 апреля 2011

Я пытаюсь создать функции из существующего кода, чтобы сделать его чище, и у меня возникли некоторые проблемы:

Раньше было:

int foo(char * s, char * t, char ** out) {
  int val = strcmp(s, t);
  if (val == 0) {
     *out = strdup(s);
     return 1;
  } else {
     *out = strdup(t);
     return 5;
  }
  return 0;
}

Теперь у меня есть:

int foo(char * s, char * t, char ** out) {
  someFunction(s, t, out);
  printf("%s", *out);
  return 0;
}

int someFunction(char *s, char * t, char **out) {

  int val = strcmp(s, t);
  if (val == 0) {
     *out = strdup(s);
     return 1;
  } else {
     *out = strdup(t);
     return 5;
  }
  return 0;
}

И я получаю ошибки сегментации, когда пытаюсь выполнить printf. Должна ли некоторая функция ожидать * выхода? Я думаю, я все еще в замешательстве.

Ответы [ 2 ]

2 голосов
/ 12 апреля 2011

Этот код является "правильным", если я понимаю ваше намерение.Я предполагаю, что вы делаете что-то вроде

char *s = "foo";
char *t = "bar";
char *out;
foo(s, t, out);

, когда вы действительно хотите

char *s = "foo";
char *t = "bar";
char *out;
foo(s, t, &out);  // Note the & which passes the address of a char* to be manipulated
0 голосов
/ 12 апреля 2011

Я бы преобразовал это так:

int foo(char * s, char * t, char ** out) {
    int val = strcmp(s, t); 
    *out = val ? strdup(t) : strdup(s);
    return val ? 5 : 1;
}
...