Указать на блок памяти, хранящийся в массиве символов, или скопировать этот массив символов в переданные параметры символов в функции?

#arrays #c #char

#массивы #c #символ

Вопрос:

У меня есть следующий метод

 void foo(FILE*, char*, char*);
 

Я вызываю этот метод из main. Затем я сравниваю значение и хочу, чтобы имя и фамилия были наименьшими из этого значения в методе.

Я прочитал файл из FILE * и хочу изменить / обработать его таким образом, чтобы в итоге я мог выполнить следующее в main.

 char* name;
char* sname;
foo(file, name, sname);
printf("nSurname: %snName: %snn", *sname, *name);
 

Я пробовал memcopy , strncpy но в итоге наткнулся на ошибку сегментации.

foo Выглядит как:

 while(fscanf() != EOF)
{
  if(certain value is smaller than held value)
  {
    //update smallest value;
    //point to that name and surname to whom smallest value belongs to;
  }
}
 

Извините, если я спрашиваю что-то действительно простое или прямое. Я из C std::string и теперь борюсь с этим. Любая помощь или предложение будут оценены по достоинству.

Комментарии:

1. Похоже, у вас есть неинициализированные указатели, которые вы пытаетесь разыменовать. Это не сработает — вам нужно сначала заставить их указывать на что-то.

2. char * это просто указатель. Он не указывает / ссылается на какую-либо допустимую память, пока вы явно не зададите ему такой допустимый адрес памяти. Есть несколько способов исправить это, но один простой — изменить их на массивы символов : char name[MAX_LEN]; . Имейте в виду, что переполнение буфера необходимо обрабатывать при использовании фиксированных размеров массива, подобных этому.

3. И для printf %s спецификатора требуется строка. *sname является a char . Поэтому удалите * .

4. Параметр size of strncpy обычно используется, чтобы убедиться, что вы не копируете больше символов, чем поместилось бы в целевом массиве. Чтобы сделать это, вам нужно будет передать размер массива foo в дополнение к адресу. Обратите внимание, что strncpy это не добавляет завершение '' , если исходная строка слишком длинная для указанного размера.

5. @tadman Да. Я сделал char var[W_LENGTH] = { ''}