как эти два указателя псевдонимы? - PullRequest
0 голосов
/ 06 марта 2012

У меня есть два указателя, amen и ptr , где все значения, которые я назначаю amen , также будут присвоены ptr .

Могут ли ptr и amen быть псевдонимами?

void func(const char *ptr) 
{
  struct samp *test;
  DIR *dp;
  char *amen;
  if(ptr[0]=='c'||ptr[0]=='C')
  strcpy(amen,"c_amen.txt");
  else if()
  ......
  else
  ...
}

, так что если func называется func ("C"); , ptr будет иметь то же значение, что и amen сразу после строки 4.

Плюс, то есть const для?Разве это не должно защищать ptr от изменения внутри func ?

1 Ответ

1 голос
/ 07 марта 2012

В настоящее время вы не можете делать какие-либо предположения о поведении, поскольку следующие строки некорректны:

char *amen;
// ...
strcpy(amen,"c_amen.txt");

Вы передаете неинициализированный указатель на strcpy, поэтому вам необходимо это исправить (он ожидает, чтоуказатель назначения действителен и имеет соответствующий размер для хранения скопированной строки).

После исправления, да, amen будет указывать на строку с тем же содержимым.Конечно, он будет очищен после завершения вызова функции, поэтому не очень полезен.Вам нужно передать размер строки или вызвать strlen на ptr, чтобы выяснить, какой размер буфера нужно выделить.

const в этом контексте означает, что вы не можете изменить содержимое, котороеуказатель указывает на то, что данные доступны только для чтения.Сам указатель не является константой.

...