Ошибка с strcpy и strcat - PullRequest
       4

Ошибка с strcpy и strcat

3 голосов
/ 27 июля 2011

Все, что я пытаюсь сделать, это добавить строку в strcpy и объединить с коротким. Но я получаю две ошибки, делая этот код ниже

struct local_stack_def
  {

   char *result;
   char delims[3];
   char user_id_E[200];
   short user_maxlen, range_eulm, imp_eulm, len_eulm;
   char msg_eulm[400];
   /*MORE VARIABLE REMOVED TO SHORTEN LENGTH*/
  };

  short  pool_err;
  struct local_stack_def *l;


  l  = POOL_GETSPACE_(i_exit_cb->Pool_addr,sizeof(struct local_stack_def),&pool_err );


    /*MORE VARIABLE REMOVED TO SHORTEN LENGTH*/

  if (l->resultFR != 0)
     {
      l->range_eulm= 1501;
      strcpy(l->msg_eulm,"FILENAME_RESOLVE_ ERROR - ERROR#:");
      strcat(l->msg_eulm, l->resultFR);

С помощью strcpy и strcat я получаю эти ошибки

strcpy(l->msg_eulm,"FILENAME_RESOLVE_ ERROR - ERROR#:");     
 Warning 207: address pointing at code space is taken

 strcat(l->msg_eulm, l->resultFR);
 Warning 86: argument 2 conflicts with formal definition

Ответы [ 3 ]

1 голос
/ 27 июля 2011

Вы не предоставили информацию о resultFR (что, очевидно, не const char*).

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

Предупреждение 207: Адрес объекта, который находится в пространстве кода, берется.Использование этого адреса действительно только в том же сегменте кода, что и объект.

1 голос
/ 27 июля 2011

для объединения вам нужно использовать itoa (или один из его вариантов)

strcat(l->msg_eulm, itoa(l->resultFR));

Если у вас нет itoa в вашей библиотеке c, то вы можете использовать snprintf.OR искать другую функцию, которая принимает число и возвращает символ *

1 голос
/ 27 июля 2011

Обе функции работают на char* типах. Когда вы используете strcpy в определенной вами константной строке, эта строка находится в кодовом пространстве, что может быть проблемой, отсюда и предупреждение.

Вторая ошибка вызвана тем, что вы не можете объединить целое число в строку. Если вы хотите напечатать значение этого короткого замыкания, вам нужно преобразовать его, например, через sprintf в char*, а затем констатировать это char*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...