如何在C中打印字符串,以便显示\n,\ o等字符?

Gee*_*_SO 0 c string special-characters

我需要检查我的程序是否正确地在我的字符串中输入这些字符,那么我怎样才能看到一个"原始"字符串,这些字符未解析但实际显示?

Som*_*ude 5

如果您读取输入(来自文件或来自用户),则不会解析特殊转义码.它只在源代码中的字符串和字符文字中,编译器专门处理它们.

编辑:简单的示例程序,带有输入和输出,以显示我正在谈论的内容.

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

int main(int ac, char *av[])
{
    char input[32];

    printf("Enter input: ");
    fgets(input, sizeof(input), stdin);

    /* Remove trailing newline */
    if (input[strlen(input) - 1] == '\n')
        input[strlen(input) - 1] = '\0';

    printf("input is \"%s\"\n", input);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

以上程序的示例运行:

Enter input: foo\nbar\thello
input is "foo\nbar\thello"

该函数fgets将实际换行留在字符串的末尾.然而,该序列\n\t在输入并没有得到翻译到换行或标签(分别地).那是因为它不是处理这些特殊字符序列的输入或输出函数,而是编译器.

如果您在源代码中的字符串或字符文字中包含这些序列,则编译器会识别这些序列并将其更改为正确的换行符,制表符或您编写的任何内容.但是,由于编译器对从文件或用户读取的输入一无所知,因此不会翻译这些序列.

编辑2:如果您想知道如何在字符串中显示文字特殊字符,那么请看这个程序:

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

void print_raw_string(const char *str)
{
    while (*str != '\0')
    {
        if (isprint(*str))
            fputc(*str, stdout);
        else
        {
            switch (*str)
            {
                /* First check for known special sequences */
            case '\0':
                printf("\\0");
                break;
            case '\a':
                printf("\\a");
                break;
            case '\b':
                printf("\\b");
                break;
            case '\t':
                printf("\\t");
                break;
            case '\n':
                printf("\\n");
                break;
            case '\v':
                printf("\\v");
                break;
            case '\f':
                printf("\\f");
                break;
            case '\r':
                printf("\\r");
                break;

            default:
                /* None of the above, print it out as a hex escape sequence */
                printf("\\x%02x", *str);
                break;
            }
        }

        str++;
    }
}

int main(int ac, char *av[])
{
    char input[32];

    printf("Enter input: ");
    fgets(input, sizeof(input), stdin);

    printf("Input is: ");
    print_raw_string(input);
    printf("\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行程序时:

Enter input: foo    bar
Input is: foo\tbar\n