2013-02-18 2 views
-1

У меня есть функцияC Настройка указателя на символ * к * полукокса

setCharVal(char *s, int value){ 
    valueStruct* makeStruct = malloc(sizeof(valueStruct)); 
    makeStruct->s = s; 
    //set other values 
} 

valueStruct имеет символ * s; когда я печатаю s, входящий в функцию, это нормально, но когда я печатаю makeStruct-> s, он ничего не печатает.

Я попытался

makeStruct->s = strdup(s); 

и

makeStruct->s = malloc(sizeof(s); 
makeStruct->s = s; 

и ни одна из этих работ; он ничего не печатает для makeStruct-> s.

Я звоню setCharVal с

setCharVal(anotherStruct.s); 
+1

Показать, где ' s' и откуда вы пытаетесь распечатать 'makeStruct-> s'. Проблема, вероятно, не в присваивании. – aschepler

ответ

0
makeStruct->s = malloc(sizeof(s); 
makeStruct->s = s; 

не вызывает утечку памяти, и получает ничего.

Что вы должны сделать это, чтобы скопировать строку в выделенный буфер (также, длина задается с помощью strlen если s является строкой или из-за пределов функции, не sizeof):

// added valueStruct* because I assume you want to return it from the function 
valueStruct* setCharVal(char *s,size_t s_size int value){ 
    valueStruct* makeStruct = malloc(sizeof(valueStruct)); 
    makeStruct->s = malloc(s_size); 
    memcpy(makeStruct->s, s, s_size); 
    // .. 
    return makeStruct; 
} 
+0

Спасибо, я думаю, что это могло бы сделать трюк! – winepretzel

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