c - Printf 在 Ubuntu 中不工作

标签 c printf c-strings

所以我需要编写一个程序,一次将其输入反转一行,这就是我基本上想到的:

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

#define MAXLINE 1000

int getLine(char s[], int lim)
{
        int c, i;
        for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
                s[i] = c;
        if (c == '\n') {
                s[i] = c;
                ++i;
        }
        s[i] = '\0';
        return i;
}

int reverse(char line[], char reverse[])
{
        int i, j;
        for (i = 0, j = strlen(line); i < strlen(line); i++, j--) {
                reverse[i] = line[j];
        }
        return 0;
}

int main()
{
        int len;
        char line[MAXLINE];
        char rev[MAXLINE];
        while (len = getLine(line, MAXLINE) > 0) {
                reverse(line, rev);
                printf("%s\n", rev);
        }
        return 0;
}

据我所知,它很好,应该可以正常工作,但是当我运行它时,即使打印了下一行,那里也没有反转的字符串! 同样的问题在其他程序中也存在,我需要打印一个字符串,我不确定我是否应该在 askubuntu 论坛或这里提问,所以我先在这里试了一下!

最佳答案

在反向函数中,您错过了复制 '\0' 字符。这可能导致 printf 不打印字符串。请记住,strlen 给出的长度没有 '\0'

修改后的Reverse函数应该是这样的:

int reverse(char line[], char reverse[])
{
        int i, j;
        for (i = 0, j = (strlen(line)-1); i < strlen(line); i++, j--) {
                reverse[i] = line[j];
        }
        reverse[i] = '\0'
        return 0;
}

关于c - Printf 在 Ubuntu 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40737202/

相关文章:

c - 在 C 中打印字符串数组时出错

c - 验证可变长度参数

c - 使用 C 合并 k 个排序数组

c++ - 使用 minizip 从内存缓冲区打开文件

c - 我们如何将包含预定义宏的字符串存储到 C 中的变量中?

c++ - 为什么 c++ std::string.length() 在 VS2017 上比 strlen() 慢?

android - 堆损坏 - Android native 代码中的 SEGV_MAPERR

C: 第二次提示输入时 scanf 和 printf 错误

c - regexec 和 regcomp 比我自己做 strncmp 更有效吗?

arrays - 为什么交换两个变量后无法读取一个变量