Как скопировать что-то в строку, если я передам это функции? - PullRequest
0 голосов
/ 30 января 2019

Я не могу скопировать что-либо в строку после передачи в функцию.В основной функции я сделал это:

char *s;
function(s);

Затем в функции я копирую что-то в строку, но когда я печатаю это в основном, оно печатает (null), почему?

1 Ответ

0 голосов
/ 30 января 2019

Функция, подобная void function(char*s), ожидает указатель на правильно распределенный объект (или NULL, чтобы сделать явным, что ничего действительного не было передано).Существует несколько способов выделения объекта: один - malloc, другой - объект с автоматической или статической продолжительностью хранения.

Но есть по крайней мере одна вещь, которую вы не должны делать: передать указатель, который являетсяне инициализирован;этот указатель может указывать на «где-то» и в этом случае приводит к неопределенному поведению:

void function(char*s) {
   if (s != NULL) {  // valid?
      strcpy(s,"Hello world!");
   }
}

int main() {
   char s1[20];  // automatic storage duration
   char s2[] = "some initil value"; // automatic storage duration
   static char s3[30]; // static storage duration
   char *s4 = malloc(30); // dynamic storage duration

   function(s1);
   function(s2);
   function(s3);
   function(s4);
   function(NULL); // explicitly something NOT pointing to a valid object

   free(s4); // deallocate object with dynamic storage duration

   // don't do that:
   char* s5;  // s5 is not initiaized
   function(s5);  // -> undefined behaviour
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...