Я пытаюсь объединить две строки в программировании на языке C. Вот мой код:strncat() снова копирует в ту же строку
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char const *argv[])
{
/* code */
char s1[3],s2[34];
strncat(s1,"mv ",3);
strncat(s2," /home/xxxxxxx/.local/share/Trash/",34);
printf("%s \n",s1);
return 0;
}
, когда я пытаюсь напечатать значение в s1
он печатает mv /home/xxxxxxx/.local/share/Trash
как выход. Почему значение, которое я добавляю для s2, добавляется со строкой s1? Если вопрос уже задан, поставьте ссылку.
Использование 'strncat()' действительно сложно! Какой номер вы предоставляете в качестве длины? Это не общая длина, доступная в 's2' (в вашем примере); это длина, оставшаяся после текущего содержимого 's2', или' sizeof (s2) - strlen (s2) - 1' (если вы исправите проблему, что ни 's1', ни' s2' не является нулевым, конец строки). Непонятно, почему вы хотите использовать команду 's1' и аргумент в' s2'. Вероятно, вам лучше работать с 'snprintf (s2, sizeof (s2),"% s% s "," mv ","/home/... ");'. –
Избегайте использования 'strncat (a, b, sizeof (a));'. После застрахования 'a' имеет в себе законную строку, лучше использовать' strncat (a, b, sizeof (a) -1); a [sizeof (a) -1] = '\ 0'; '. Это гарантирует, что не слишком много символов 'char' были объединены, а массив' '\ 0'' завершен. – chux