C - 如何打印从命令行参数获取的字符串中的转义字符?



编译以下代码后,我像

输入:./a.out stack'n'overflow

输出:

stacknoverflow

输入:./a.out stack"n"overflow

输出:

stacknoverflow

输入:./a.out stack\noverflow

输出:

stacknoverflow  

上述输入的预期输出:

stack    
overflow

这是我的代码:

#include <stdio.h>
int main(int argc, char *argv[]) {
printf("string from comand line : %sn", argv[1]);
}

字符串或代码中的字符中的"转义序列"由编译器在编译时解析。它根本不在运行时处理。

如果你在POSIX系统(如macOS或Linux或类似系统(中,那么你可以在运行程序时使用shell插入换行符:

$ ./a.out '`echo -n -e "stacknoverflow"`'

这将调用echo命令并要求它回显字符串"stacknoverflow"而不尾随换行符(这就是-n选项的作用(。嵌入的"n"将由echo解析(因为-e选项(,并在它"打印"的字符串中插入换行符。echo打印的输出将作为单个参数传递给程序。

唯一的其他选择是显式解析程序中的字符串,并在找到字符'\'后跟字符'n'时打印换行符。

检查这个程序,输入:堆栈''溢出
输出:堆栈
溢出

#include<stdio.h>  
#include<string.h>  
void addescapeseq(char *ptr)  
{  
char *temp;  
while(strstr(ptr,"\n")||strstr(ptr,"\t")||strstr(ptr,"\r"))  
{  
if(temp=strstr(ptr,"\n"))  
{  
*temp=10;  
strcpy(temp+1,temp+2);  
}  
else if(temp=strstr(ptr,"\r"))  
{  
*temp=13;  
strcpy(temp+1,temp+2);  
}
else if(temp=strstr(ptr,"\t"))  
{  
*temp=9;  
strcpy(temp+1,temp+2);  
}  
}  
}  
int main(int argc,char *argv[])  
{  
addescapeseq(argv[1]);  
printf("Data : %sn",argv[1]);  
}  

尝试使用此函数:

void ft_putstr(char *s)
{
int i = 0;
while (s[i])
{
if (s[i] == '\')
{
if (s[i + 1] == 'n')
{
putchar('n');
i += 2;
}
}
if (s[i] != '')
{
putchar(s[i]);
i++;
}
}
}

最新更新