Конкатенация строк в C - PullRequest
       11

Конкатенация строк в C

0 голосов
/ 14 сентября 2011
char *str1 = malloc(256*sizeof(char));
char *str2 = "stack"
for (i=0;i<15;i++){
     sprintf(str1,"%s%s",str1,str2);
} 
printf("%s\n",str1);

Я пытаюсь объединить str2 в str1 при каждом числе циклов. Но этот сегмент кода работает, но уязвим. Как лучше всего их согласовать?

Ответы [ 4 ]

4 голосов
/ 14 сентября 2011

В соответствии с CERT Secure Coding Guidelines, вам необходимо использовать указатели для констант при обращении к строковым литералам .

Итак, char *str2 = "stack" должно быть const char *str2 = "stack";.

Это сделает его неизменным.

Кроме того, вы используете устаревшие / устаревшие функции . Безопасная функция, которую вы должны использовать - strcat_s. Например,

Пример соответствия

enum { BUFFERSIZE=256 };

void complain(const char *msg) {
  static const char prefix[] = "Error: ";
  static const char suffix[] = "\n";
  char buf[BUFFERSIZE];

  strcpy_s(buf, BUFFERSIZE, prefix);
  strcat_s(buf, BUFFERSIZE, msg);
  strcat_s(buf, BUFFERSIZE, suffix);
  fputs(buf, stderr);
}

Читайте здесь о strcpy_s () и strcat_s () .

0 голосов
/ 14 сентября 2011

Если вы хотите использовать sprintf; как то так:

char *str1 = malloc(256*sizeof(char));
char *str2 = "stack";
*str1 = '\0';
for (i=0;i<15;i++){
    snprintf(str1 + strlen(str1), 256 - strlen(str1), "%s", str2);
} 
printf("%s\n",str1);
0 голосов
/ 14 сентября 2011

Использование strncat:

char *str1 = malloc(256*sizeof(char));
str1[0] = '\0';
char *str2 = "stack"
for (i=0;i<15;i++){
     strncat(str1, str2, 256 - 1 - strlen(str2));
} 
printf("%s\n",str1);
0 голосов
/ 14 сентября 2011

Стандартная функция C для конкатенации строк: char * strncat ( char * destination, char * source, size_t num );.

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