C:为什么从命令行获取的字符串似乎比在程序中设置的字符串更容易识别?

C:为什么从命令行获取的字符串似乎比在程序中设置的字符串更容易识别?,c,string,command-line-arguments,C,String,Command Line Arguments,例如: 假设我手动输入: char * string = "\n\n"; 当我调用strlenstring时,我会得到2 但是,如果我从命令行获取string,则strlenstring的值将改为4 为什么会这样?我如何解决这个问题,使我得到2而不是4 另外,当我试图打印命令行参数时,得到的是\n\n而不是两行跳过的命令行 如何更改?当通过命令行执行o insert\n\n时,读取的字符为“\”、“n”、“\”、“n”,因此大小为4是正确的。当您像这样将\n\n放入字符串常量时,您正在将特殊

例如: 假设我手动输入:

char * string = "\n\n"; 
当我调用strlenstring时,我会得到2

但是,如果我从命令行获取string,则strlenstring的值将改为4

为什么会这样?我如何解决这个问题,使我得到2而不是4

另外,当我试图打印命令行参数时,得到的是\n\n而不是两行跳过的命令行


如何更改?

当通过命令行执行o insert\n\n时,读取的字符为“\”、“n”、“\”、“n”,因此大小为4是正确的。当您像这样将\n\n放入字符串常量时,您正在将特殊字符“\n”放入字符串中,因此\n\n的大小实际上是2

如果要将“\n”放在字符串中,则必须右键\\n而不是\n

另外,请注意,如果要向程序传递一个包含大量文本的文本,\n,\t等,则不能将\n \n写入命令行并期望解析器将其解释为换行符。。。您应该考虑在文件中写入该文件,然后像这样调用程序。 .\prog.out

之后,你应该考虑使用Sttok来解析输入,Strutok将字符串分割成标记,多读。

\P>\n是A在PASCAL中C.中的一个新的行字符的表示,它是10。所以快速的方法是将字符串中的所有\n替换为“\n”。

因为您的shell似乎不会逃逸\n\n。它将文本字符串\n\n传递给您的程序,而不是两个换行符。这个问题似乎与主题无关,因为它与编程无关,而是与shell的使用有关。您如何读取输入,是否使用getch、gets、fprintf?
#include <stdio.h>
#include <string.h>

char *repnl(char *str){
    char *from, *to;
    from = to = str;
    while(*from){
        if(*from == '\\' && from[1] == 'n'){
            *to++ = '\n';
            from += 2;
         } else
            *to++ = *from++;
    }
    *to = '\0';
    return str;
}

int main(int argc, char *argv[]) {
    repnl(argv[1]);
    printf("len=%d\n", strlen(argv[1])); 
    return 0;
}