如何将int数组转换为char数组

时间:2021-06-13 09:28:55

标签: arrays c

所以我试图将整数数组转换为特定样式的字符数组。我想结束的是:

charArray[] = "084 438 038 002 093 249 168"

这是我在意识到每个 int 将超过 1 个字符之前开始的。

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

void intToChar(int n, int numArray[], char charArray[]);

int main() {
    
    int i;
    int n = 7;
    int numArray[] = {84, 438, 38, 2, 93, 249, 168};
    char *charArray = (char*)malloc(sizeof(char) * (4 * n - 1);
    intToChar(n, numArray, charArray);
    for (i = 0; i < n; i++) {
     printf("%c ", charArray[i]);
    }
    printf("\n");
    return 0;
}

void intToChar(int n, int numArray[], char charArray[]) {
    
    int i;
    for (i = 0; i < n; i++) {
     charArray[i] = numArray[i] + '0';
    }
}

有没有办法将像 123 这样的整数准确地变成“123”?

2 个答案:

答案 0 :(得分:2)

char *intToChar(size_t n, const int *numArray, size_t m, char *charArray) 
{    
    int pos = 0;
    while(n--)
        pos += snprintf(charArray + pos, m - pos, "%03d%s", *numArray++, n ? " " : "");
    return charArray;
}

int main() {
    
    int i;
    int n = 7;
    int numArray[] = {84, 438, 38, 2, 93, 249, 168};
    char *charArray = (char*)malloc(4 * n - 1);
    printf("`%s`\n", intToChar(n, numArray, n * 4, charArray));
    free(charArray);
    return 0;
}

这里有一个更复杂的版本,它将计算它需要多少空间并相应地分配内存。

char *intToChar(size_t n, const int *numArray) 
{    
    int pos = 0;
    char *charArray;

    //dry run
    for(size_t m = 0; m < n; m++)
        pos += snprintf(NULL, 0, "%03d%s", numArray[m], m == n -1 ? " " : "");
    
    charArray = malloc(pos + 1);    
    pos = 0;
    if(charArray)
        while(n--)
            pos += sprintf(charArray + pos, "%03d%s", *numArray++, n ? " " : "");
    return charArray;
}

int main() {
    
    int i;
    int numArray[] = {84, 438, 38, 245654, 93, 249, 168};
    size_t n = sizeof(numArray) / sizeof(numArray[0]);
    char *charArray;
    //you should check if the function returned valid pointer before using it
    printf("`%s`\n", (charArray = intToChar(n, numArray)));
    free(charArray);
    return 0;
}

答案 1 :(得分:-2)

sprintfstrcat 可能有用。

类似于:

int main() {        
    int n = 7;
    int numArray[] = {84, 438, 38, 2, 93, 249, 168};
    char charArray[256];
    char tmp[32];
    sprintf(charArray, "%03d", numArray[0]); // Put first number in the
                                             // result string
    for (int i = 1; i < n; i++) {
     sprintf(tmp, " %03d", numArray[i]);  // Create a string with current number
                                          // Note: the 03 after % which
                                          // puts zero in front of numbers
                                          // having less than 3 digits

     strcat(charArray, tmp);              // Append the temporare string
                                          // to the result
    }

    printf("%s\n", charArray);    // Print the result
    return 0;
}

输出:

084 438 038 002 093 249 168