c语言编程常见问题总结(1)

总结1:

将全局变量放在会被多次调用的头文件中,编译会报错:该变量被多次定义,所以是最好把全局变量放在.c文件中。

总结2: 

Getche()函数,输入后立即从控制台取字符,不以回车为结束(带回显);

Getch()是一个不回显函数,当用户按下某个字符时,函数自动读取,无需按回车,有的C语言命令行程序会用到此函数做游戏。

这两个函数不是标准函数,在conin.h中,移植时需要注意。

总结3:

终端覆盖当前行方式

测试:

#include <stdio.h>
int main()
{
        printf("Hello \n");
        printf("Test 1");
        printf("\rTest 2\n");

        return 0;
}
输出:
Hello 
Test 2

总结4:

终端某些字符不变,只是个别字符随着键盘输入改变,可以将光标网上移动n位,然后重新覆盖打印,就可以了。

总结5:

Socket编程,server accept: Invalid argument

socklen_t clilen;
struct sockaddr_in clientaddr;
connfd = accept(listenfd,(sockaddr *)&clientaddr,&clilen);

问题就出在accept的第3个参数:必须为正数,把那个变量初始化一下就好了~
socklen_t clilen= sizeof(struct sockaddr);
struct sockaddr_in clientaddr;
connfd = accept(listenfd,(sockaddr *)&clientaddr,&clilen);

总结6:

Shell脚本出现以下错误:

gcc:fatal error:no input files  (致命错误)

compilation terminated.(编译终止)

导致的原因可能是,gcc后面的文件名有错误,编译器没有找到。

总结7:

Shell脚本出现以下错误:

./cs 行17:-f:未找到命令

导致的原因可能是,if A[ A-fA${target}A];,A是空格,缺少其中一个空格,这几个空格都不能少,这里的分号;有没有,我这边用gcc(ubuntu 7.2.0)编译,执行结果都是一样的,没有报错。

Linux的man命令等级:

man 分为1 2 3 4 5 6 7 8等级别
1、Standard commands (标准命令)
2、System calls (系统调用)
3、Library functions (库函数)
4、Special devices (设备说明)
5、File formats (文件格式)
6、Games and toys (游戏和娱乐)
7、Miscellaneous (杂项)
8、Administrative Commands (管理员命令)
比如man socket, 可以发现SEE ALSO中包括ACCEPT(2)等等,可以通过man 2 accept 查看

总结8:

Socket AF_UNIX编程问题:

Bind:address already in use,

Connect:connection refused.

可以采取以下的方式解决,但这个方法不一定唯一:在socket创建之前加unlink(“server_socket”),在socket关闭之后,加unlink(“server_socket”)。个人测试,创建前的必须加,关闭之后是可以不加,但是建议都加上,比较安全。

总结9:

Socket 编程编译问题:

/*接受客户端请求; 第2个参数用来存储客户端地址; 第3个参数用来存储客户端地址的大小*/
 /*建立(返回)一个到客户端的文件描述符,用以对客户端的读写操作*/
        client_sockfd = accept (server_sockfd, (struct sockaddr *)&client_address, (socklen_t*)&client_len);

在使用accept函数之后,会产生一个新的socket描述符,另外的服务器描述符又去继续接听其他的客户端了。所以编程建议是开始定义两个描述符,server_sockfd和client_sockfd。

猜你喜欢

转载自blog.csdn.net/weixin_39465823/article/details/83786606