2015-04-24 4 views
0

Извините, если название темы не очень ясное, я не смог найти способ выразить это. Так скажем, у меня есть эта структура:Добавление int как char в char []

struct filee 
    { 
     ... 
     int number; 
     char filename[7]; 
    }; 
typedef struct filee filee; 

, и я хочу, чтобы инициализировать его с помощью функции

void file_init(filee* x,int n) 
{ 
    x->number=n; 
    x->filename=(char)n+"ch.bmp" 
} 

но это действительно не работает, так что я хочу, если, например, я делаю это :

file_init(&randomFile,2); 

Он работает следующим образом:

randomFile.number=2; 
randomFile.filename="2ch.bmp"; 

Я надеюсь, что то, что я сказал, ясное и спасибо за помощь!

+2

примечание: 'символ имени файла [7];' мал. – BLUEPIXY

+0

относительно этой строки: 'x-> filename = (char) n + "ch.bmp" в C, символьные строки не могут быть объединены с помощью оператора' + '. см. ответ @iharob для примера того, как это сделать. – user3629249

+0

char string 'ch.bmp' имеет 7 символов (помните конечную «\ 0» в строке), тогда префикс с одной (или более) цифрами переполнит границы массива имен файлов. Это приводит к неопределенному поведению, которое может/приведет к событию сбоя seg. – user3629249

ответ

3

Вы должны использовать snprintf()

int length; 
int result; 

length = sizeof(x->filename); 
result = snprintf(x->filename, length, "%dch.bmp", x->number); 
if ((result < 0) || (result >= length)) 
    error_TheTargetIsNotLargeEnough(); 
+2

примечание: 'snprintf' возвращает отрицательное значение, если есть ошибка – BLUEPIXY

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