2016-09-12 3 views
0

Я использую цикл в C и пытаюсь определить, как работает fprintf.Как конкатенировать строки в петле?

fprintf(out, "%02X", (int)(ch & 0x00FF); 

Этот оператор печатает один символ шестнадцатеричного значения для каждой итерации цикла.

Могу ли я хранить это в переменной или массиве символов?

Как я могу объединить это в одну большую строку, а затем записать ее в файл?

Должен ли я проверить общий размер итераций и установить массив символов в правильный размер цикла в начале, а затем добавить к нему?

+0

Что вы ожидаете от печати? – Shravan40

+0

Я надеялся сохранить каждое шестнадцатеричное значение для каждой итерации в длинной строке, которую я могу распечатать сразу (в конце цикла). –

+0

На данный момент он печатает одно шестнадцатеричное значение для каждой итерации - что ожидается, но Я хочу изменить его на один вывод в конце. –

ответ

0

Я не очень уверен, что вы хотите сделать, но вы можете проверить этот код, который я сделал для вас, и, возможно, продлить его.

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

int main (void) 
{ 


    char buff[2056]; 
    char out[255]; 
    char ch ='a'; 

    sprintf(out, "%02X", (int)(ch & 0x00FF)); 

    strcpy(buff,out); 
    printf("%s",buff); 



    return 0; 
} 
1

Возможно, это может помочь.

Программа ожидает несколько десятичных входов (макс. 50). Он печатает соответствующее шестнадцатеричное значение и добавляет символ в строку (нулевой конец char array). Наконец, он печатает строку.

#include <stdio.h> 

int main(void) { 
    const int N = 50; 
    int i = 0; 
    char text[N+1]; // Make an array to hold the string 
    text[0] = '\0'; // Zero terminate it 
    int ch; 

    while(i < N) 
    { 
     if (scanf("%d", &ch) != 1) // Read decimal from stdin 
     { 
      break;     // Break out if no decimal was returned 
     } 
     printf("%02X ", (ch & 0x00FF)); 

     text[i] = (ch & 0x00FF); // Add the new char 
     text[i+1] = '\0';   // Add a new string termination 
     ++i; 

    } 
    printf("\n"); 

    printf("%s\n", text); 
    return 0; 
} 

Входной сигнал:

Выход:

ABCD

Или это lternative гласивший строку полукокса-на-гольца, пока он не видит символ новой строки:

#include <stdio.h> 

int main(void) { 
    const int N = 50; 
    int i = 0; 
    char text[N+1]; 
    text[0] = '\0'; 
    char ch; 

    while(i <= N) 
    { 
     if (scanf("%c", &ch) != 1 || ch == '\n') 
     { 
      break; 
     } 
     printf("%02X ", ch); 
     text[i] = ch; 
     text[i+1] = '\0'; 
     ++i; 
    } 
    printf("\n"); 

    printf("%s\n", text); 
    return 0; 
} 

Вход:

кодирование весело

Выход:

63 6F 64 69 6E 67 20 69 73 20 66 75 6E

кодирование - это весело

+0

Мне интересно, как работает 1-й?Я заметил, что есть «ввод», как я могу получить этот вход в основную функцию для обработки? Кроме того, размер массива символов должен быть вдвое больше, из-за того, что \ 0 добавляется после каждого символа? –

+0

@ Ke. 'scanf ("% d ", & ch)' читает целое число из stdin. Если возвращаемое значение равно 1 (то есть успеху), прочитанное значение сохраняется в 'ch'. Массив не должен быть двойным. Существует только 1 расторжение. Поэтому размер массива равен «N + 1», так что он может содержать N символов и 1 окончание. – 4386427

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