2017-01-22 2 views
2

Я пытаюсь создать простую программу, в которой части других строк добавляются в другую строку. Когда я запускаю этот код, он ничего не выводит. Извините, мои знания C очень низки. Вся помощь была оценена.Добавить часть строки в другую строку

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main() { 
    char stuff[100] = "Y"; 
    char test[] = "hello", test2[] = "shelllo"; 

    strcat(stuff, test[1]); 
    strcat(stuff, test2[0]); 

    printf("%s\n", stuff); 

    return 0; 
} 

ответ

2

Вы должны удалить индекс массива из вашего strcat, который должен выглядеть следующим образом:

strcat(stuff, test); 
strcat(stuff, test2); 

Обратите внимание, что test и test2 являются строками, но test[1] и test2[0] только отдельные символы (e и s) - strcat работает со строкой, а не с отдельными символами.

Если вы хотите скопировать только часть строки (т.е. пропуская первые несколько символов), а затем использовать арифметику указателей

strcat(stuff, test + 1); // skip 1st character of test (ie start copying from `e`) 

или

strcat(stuff, test2 + 3); // skip 3 characters of test2 (ie starting copying from `l`) 
+0

Я только хочу, чтобы добавить некоторые части переменных материала. – SycoSins

+1

ok, а затем использовать указатель arithmetic - см. Обновленный – artm

+0

Спасибо за ответ: – SycoSins

2

Вы вызываете strcat с char аргументом вместо указателя на char поведение не определено.

Здесь нет решения копировать части строк:

  • с помощью strncat(): он копирует не более заданного количества символов до конца первого аргумента.
  • с использованием snprintf() с форматом %.*s. Поле для формата %s указывает максимальное количество символов для копирования из строки. Он может быть указан как десятичное число или как *, и в этом случае точность передается как аргумент int перед аргументом строки.

Вот пример:

#include <stdio.h> 
#include <string.h> 

int main(void) { 
    char stuff[100]; 
    char test[] = "Hello"; 
    char test2[] = "The world is flat"; 

    /* using strncat */ 
    strcpy(stuff, test); 
    strncat(stuff, test2 + 3, 6); 
    printf("%s\n", stuff); 

    /* safer version using snprintf */ 
    snprintf(stuff, sizeof stuff, "Hello %.*s\n", 5, test2 + 4); 
    printf("%s\n", stuff); 

    return 0; 
} 
+0

Возможно, какое-то объяснение того, что '%. *' Действительно было бы хорошо - оно обычно не используется – artm

+0

Спасибо. Могу я спросить, почему второй «безопаснее»? – SycoSins

+0

@artm: ответ обновлен. Это действительно редко используется, но очень удобно для отдельных случаев. – chqrlie

Смежные вопросы