【问题标题】:Concatenating uint8_t to a char*将 uint8_t 连接到 char*
【发布时间】:2016-06-07 23:18:57
【问题描述】:

我对 C 真的很陌生,而且我从各种 uint8_t 创建 char* 有点复杂

我的想法是创建一个 char*,在每个位置我放置一个数字形式的矩阵

例如,如果我有一个矩阵:

[1][2][3][4]
[5][6][7][8]
[9][0][1][2]
[3][4][5][6]

id 像 char* 那是 "01234567890123456"

我在做什么,它不起作用是:

char* string = malloc(sizeof(char)*matrix->height*matrix->width);

for (int i = 0; i < matrix->height ; ++i) {
        for (int j = 0; j < matrix->width ; ++j) {
                string[i*matrix->height+j] = matrix->value[i][j];
            }
}

当然它不起作用,但我对如何进行有点迷茫,我找不到有关此问题的更多信息。

任何帮助都会很好,

谢谢

【问题讨论】:

    标签: c pointers char uint8t


    【解决方案1】:

    由于您要打印字符串,因此您需要0 的 ASCII 字符。所以,只需将'0' 添加到每个数字,就像这样

    char* string = malloc(sizeof(char)*(matrix->height*matrix->width + 1));
    
    for (int i = 0; i < matrix->height ; ++i) {
        for (int j = 0; j < matrix->width ; ++j) {
            string[i*matrix->width+j] = matrix->value[i][j] + '0';
        }
    }
    
    string[matrix->height*matrix->width] = 0; //null terminator
    

    请注意,这并不是最便携的解决方案。

    另外,请注意您要将iwidth 相乘,因为如果您没有方阵,您的计算将无法正常工作。

    sizeof(char) 有点不必要,因为无论字节大小如何,char 的大小都被定义为 1。

    【讨论】:

    • 还可能值得指出的是,结果不是 OP 可能想要的 C 字符串。由于没有 NUL 终止符。还有改成sizeof(uint8_t)的原因是什么?虽然结果可能相同,但使用与数组元素相同的类型不是更好吗?
    • 你是对的,谢谢。还有,sizeof我没有改,原来是这样回答的,问题被编辑了。
    • 是的,抱歉我编辑了这个问题,让字符大小更有意义。我的代码得到混合结果(当我向代码添加额外条件时字符串不完整(行已启用))我得到的数字是:7 the number is: 6 the number is: 7 the number is: 6 string: 7 其中字符串应该是 7676
    • 行已启用?你的意思是你只打印一些行?如果是这样,您将获得尚未写入的字符串段,并且由于您使用了malloc,因此它充满了垃圾。使用计数器来跟踪您跳过了多少元素,以便您在字符串中具有适当的偏移量。也不要忘记编写空终止符。
    • 是的,就是这样。非常感谢您的回答:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2011-06-02
    • 2012-06-06
    • 1970-01-01
    相关资源
    最近更新 更多