linux 命令行输入

linux 行输入

程序如下

#include <stdio.h>
#include <iostream>
#include <string>
int main()
{
printf("output test\n");
//std::string str = "type string test";
//printf("%s\n", str.c_str());
//std::cin >> str;
//printf("%s\n", str.c_str());
char cBuf[1024];
gets(cBuf);
printf("%s\n", cBuf);
fgets(cBuf, 1024, stdin);
printf("%s\n", cBuf);
printf("program end\n");
return 0;
}

运行结果如下:

[root@localhost prog]# g++ input.c -o input
/tmp/cc5NnA6v.o(.text+0x2e): In function `main':
: the `gets' function is dangerous and should not be used.

[root@localhost prog]# ./input
output test
gets test
gets test
fgets test
fgets test
 
program end
[root@localhost prog]#


http://blog.youkuaiyun.com/zx824/article/details/6859930

今天在LINUX下编译C程序时,出现了:
warning: the `gets' function is dangerous and should not be used.

这个warning。

百度之后,得知

问题出在程序中使用了 gets  ,Linux 下gcc编译器不支持这个函数,解决办法是使用 fgets


[cpp]  view plain copy
  1. fgets()函数的基本用法为:  
  2.   
  3. fgets(char * s,int size,FILE * stream);//eg:可以用fgets(tempstr,10,stdin)//tempstr 为char[]变量,10为要输入的字符串长度,stdin为从标准终端输入。  

[cpp]  view plain copy
  1. /*   代码实现     */  
  2.   
  3. #include <stdio.h>  
  4. int main ( ) {  
  5.   
  6.    char name[20];  
  7.   
  8.    printf("\n 输入任意字符 : ");  
  9.   
  10.    fgets(name, 20, stdin);//stdin 意思是键盘输入  
  11.   
  12.    fputs(name, stdout); //stdout 输出  
  13.   
  14.    return 0;  
  15. }  

根据以上改动后,果然没有了warning,但是调试了n久的一个程序,确实怎么也没有正确结果,最后step跟踪,才发现了问题所在!那就是:
gets从终端读入是的字符串是用\0结束的,而fgets是以\n结束的(一般输入都用ENTER结束),然后strcmp两者的时候是不会相等的!

所以建议大家还是继续让它warning吧。。为了正确性!


这个问题主要应该是因为linux 和 windows的文件在换行符上编码不一样导致的,linux的换行是\0,windows的换行是\13\0,是两个字符。

但是的文件应该是在windows下编译的,所以导致会出现两字符不匹配。建议可以在linux终端下,利用dos2unix filename,来将换行符处理一下,应该就OK了


### Linux 命令行输入规范及使用准则 Linux 命令行是一种基于文本的用户界面,允许用户通过输入命令与系统进行交互。其设计遵循 Unix Shell 的基本规范,通常使用 Bash(Bourne-Again Shell)作为默认的命令解释器。命令行输入规范主要包括命令结构、参数格式以及输入方式的约定。 #### 命令行的基本结构 Linux 命令行的基本结构通常包括命令名、选项和参数三部分: ```bash command [options] [arguments] ``` - **command**:要执行的程序或脚本名称。 - **options**:用于控制命令行为的选项,通常以 `-` 或 `--` 开头。 - **arguments**:命令操作的对象,例如文件名、目录名或其他数据。 例如,执行 `ls -l /home` 命令时,`ls` 是命令名,`-l` 是选项,`/home` 是参数。 #### 选项的格式规范 命令行选项通常分为短选项和长选项两种形式: - **短选项**:使用单个字母表示,前面加一个连字符 `-`,例如 `-l`、`-a`。 - **长选项**:使用完整的单词表示,前面加两个连字符 `--`,例如 `--help`、`--version`。 某些命令支持组合短选项,例如 `ls -la` 等价于 `ls -l -a`。部分命令还允许选项后跟参数,例如 `-f filename` 或 `--file filename`。 #### 参数的使用规则 参数是命令操作的目标,可以是文件名、目录路径、字符串或其他数据。例如: ```bash grep "hello" file.txt ``` 在该命令中,`"hello"` 是要搜索的字符串,`file.txt` 是要搜索的文件。参数的顺序通常会影响命令的执行结果,必须遵循命令文档中指定的顺序。 #### 输入方式与脚本执行 用户可以直接在命令行输入命令执行,也可以将多个命令写入脚本文件中批量执行。这种方式使得命令行程序易于自动化,且可以通过脚本实现复杂的任务流程。例如: ```bash #!/bin/bash echo "Hello, Linux" ``` 该脚本的第一行指定了解释器为 `/bin/bash`,随后的命令将被依次执行。 #### 使用准则与最佳实践 - **命令简洁性**:命令行界面允许用户通过简短的命令完成复杂任务,例如 `find / -name "*.log"` 可用于查找系统中所有 `.log` 文件。 - **可组合性**:多个命令可以通过管道 `|` 或重定向 `>` 组合使用,例如 `ps aux | grep nginx` 可用于过滤运行中的 nginx 进程。 - **可脚本化**:命令行程序易于通过脚本自动化,适合系统管理、批量处理等任务[^4]。 - **远程操作友好**:通过 SSH 或 Telnet 等工具远程操作服务器时,命令行界面比图形界面更高效。 - **资源占用低**:命令行程序对系统资源的需求通常较低,适用于嵌入式设备或资源受限的环境[^4]。 #### 常见错误与注意事项 - **权限问题**:某些命令需要管理员权限才能执行,例如 `sudo apt update`。 - **路径问题**:相对路径和绝对路径的使用需谨慎,避免误操作文件。 - **选项冲突**:不同命令的选项可能含义不同,需查阅文档确认功能。 - **输入格式错误**:确保参数格式正确,例如文件名是否正确、是否存在特殊字符等。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值