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

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39465823/article/details/83786606

总结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。

展开阅读全文

c语言编程常见的错误1

02-12

c语言具有使用方便灵活,功能强大的特点,对于初学者来说,往往不知道自己错在哪里?下面总结了一些初学者编程常见的错误,希望可以给初学者一些帮助。rnrn1、忽略“=”和“==”语句的区别rn c语言中的“=”为赋值语句,而“==”才是比较语句rn 比如:a=8 是指将8的值赋值给a 而a==8表示的是a等于8rn 这是特别需要注意的,尤其是在循环语句中,如果混用就很容易陷入死循环rn2、scanf函数的用法rn scanf函数的格式为:scanf(“格式控制”,地址列表)rn 如:scanf("%d", &x)rn 初学者很容易将&取地址符号去掉,而导致语法报错。rn3、数据类型与所用格式不一致rn c语言具有数据类型丰富的特点,因此熟练掌握数据类型与所用的格式是相当重要的rn int -----------drn float ----------frn char------------crn 如:换行输出变量a(int)和b(char)的值rn printf("%d%c\n",a, b)rn4、忘记分号rn 语言中每一条语句的最后都需要添加一个分号,分号表示语句的结束。如果在该语句末尾没有加上那个;rn 那系统会将本条语句和下一条语句视为同一条语句,gcc编译报错时,如果在本行没有找到错误,可以检查rn 上一行是否遗漏了分号。rn5、混淆字符常量和字符串常量rn 字符常量是用单引号' '的单个字符,而字符串常量是用“ "的字符序列,c语言规定,”\"作为字符串结 rn 束的标志,所以“a"实际是两个字符’a'和‘\'rn 如:char c;rn c = "a"就是明显的错误 论坛

没有更多推荐了,返回首页