c - 打印字符串给出字节 C

标签 c arrays string printf

<分区>

当我编写简单的代码将简单的字母序列编码为字节并再次解码时,我遇到了解码问题。一切都在完成我想要有 4 个字符的序列,但它还包括末尾的字节。这是我的代码:

char* B2T(int num) {
    unsigned char temp;
    char res[4];
    int sw[] = { 6,4,2,0 };
    char tab[4] = { 'A', 'C', 'G', 'T' };
    int i = 0;
    for (int i = 0; i < 4; i++) {
        res[i] = tab[(num >> sw[i]) & 3];
    }
    printf_s("%s\n", res); //!!!!!!problem here!!!!!!!!
    return res;
}

int main() {
    FILE *I, *O;
    char tab[5], opt;
    int res, i, temp;
    bool work = true;
    while (work) {
        printf_s("\nChoose option: decode or encode (d/e): ");
        scanf_s("%c", &opt);
        switch (opt) {
        case 'e':
            fopen_s(&I, "DNA.txt", "r");
            fscanf_s(I, "%s", &tab, 5);
            fopen_s(&O, "result.bin", "a");
            while (feof(I) == 0) {
                res = T2B(tab);
                printf_s("%X ", res);
                fprintf_s(O, "%X ", res);
                fscanf_s(I, "%s", &tab, 5);
            };
            fclose(I);
            fclose(O);
            break;
        case 'd':
            fopen_s(&I, "result.bin", "r");
            fscanf_s(I, "%X", &temp);
            while (feof(I)==0) {
                char* ress = B2T(temp);
                fscanf_s(I, "%X", &temp);
            }
            fclose(I);
            break;
        }
    }
    return 0;
}

最佳答案

您填充 char res[4];,但没有以 null 终止它,这会导致未定义的行为,因为 printf() 期望停止打印的空终止符号。

改为这样做:

char res[5];
res[4] = '\0';

此外,你应该关注这一行:

while (feof(I) == 0)

在循环中使用 feof() 来停止解析文件。这是一个已知问题,它解释了您的额外角色。请阅读Why is “while ( !feof (file) )” always wrong?


PS:一般来说,C 库的所有函数都希望字符串以 null 结尾,因此强烈建议让所有字符串都以 null 结尾。

关于c - 打印字符串给出字节 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50579586/

相关文章:

javascript - 从带有通配符的对象中删除属性

java - 替换字符串中的相应字符(java)

c - 在两个不同的头文件中的两个结构中包含循环依赖是错误的吗?

c - kernel/sched.c/context_switch() 是否保证每次进程切换时都会被调用?

javascript - 根据数组或对象项的数量设置背景图像

javascript - Array.splice 会导致内存泄漏吗?

c - 字符串减去C中的字符串

ruby - 将数字转换为 ruby​​ 中的单词 - 改进我的递归解决方案

C 编程帮助 - 为用户提供退出程序的选项

c - 嵌套for循环,运行系列10000次