2014-11-30 2 views
-1

У меня проблема с строками C. У меня есть массив char char_array[256] = {0}.C char [] и * char

Я выполнил этот массив с элементами char. Когда я печатаю эти элементы printf("%c", char_array[0]);, printf("%c", char_array[1]); и т. Д., Значения верны. Но когда я пытаюсь напечатать printf("%s", char_array);, он ничего не печатает ...

Также у меня есть функция void function(char* char_pointer). Я пытаюсь вернуть данные strcpy(char_pointer, char_array). Но он ничего не возвращает ...

Пожалуйста, помогите мне, как вернуть данные из функции, что позже, вне функции, я мог бы напечатать printf("%s", char_pointer_from_function)?

ОБНОВЛЕНИЕ:

Функция:

void unmarshal_packet(char *packet) 
{ 
    char packet_size_string [10] = {0}; 
    char unmarshaled_data [2000] = {0}; 
    int counter = 0; 

    while (packet[counter] != ':' && counter < strlen(packet)) 
    { 
     packet_size_string[counter] = packet[counter]; 
     counter++; 
    } 

    counter = strlen(packet_size_string) + 1; 

    for (counter; counter < strlen(packet); counter++) 
    { 
     if ((packet[counter] != '\r') && (packet[counter] != '\n')) 
     { 
      unmarshaled_data[counter - (strlen(packet_size_string) + 1)] = packet[counter]; 
     } 
    } 

    // printf("%c", unmarshaled_data[0]); 
    // printf("%c", unmarshaled_data[1]); 
    // printf("%c", unmarshaled_data[2]); 
    // printf("%c", unmarshaled_data[3]); 
    // printf("%c", unmarshaled_data[4]); 
    // printf("%c", unmarshaled_data[5]); 
    // printf("%c", unmarshaled_data[6]); 
    // printf("%c", unmarshaled_data[7]); 
    // printf("%c", unmarshaled_data[8]); 
    // printf("%c", unmarshaled_data[9]); 

    printf("%s", unmarshaled_data); 

    unmarshaled_data[counter - (strlen(packet_size_string) + 1)] = '\0'; 

    strcpy(packet, unmarshaled_data); 
} 

Вызов функции:

strcpy(buffer, " \nWellcome to Yes/No game server! \n"); 
unmarshal_packet(buffer); 
+0

Добавьте ваш код пожалуйста. –

+0

@Jacob Jones Пожалуйста, укажите соответствующий код. –

+0

'% s' означает печать строки *, которая представляет собой серию непустых символов, за которыми следует нулевой символ. Он прекратит печать, если найдет нулевой символ, а также вы получите удивительный вывод для непечатаемых символов (например, возврат каретки) –

ответ

1

Строки являются последовательности не-NULL (значение ASCII 0) символов, после чего такой характер, что указывает на конец строки. Если, например, ваш первый символ, где NULL, который будет представлять строку пустым, и поэтому ничего не будет напечатано. Не зная, что вы помещаете в свой массив перед печатью, я не могу сказать, что должно быть напечатано.

+0

Я обновил свое сообщение с дополнительной информацией. –