fgets会把回车读入数组,有printf打印时会打印回车符自动换行,如果用puts打印的话会多一行空白行(puts打印会自动在字符串末尾加上\n回车符,加上fgets读取的输入的回车符所以会多出一行)
错误:程序中有游离的‘\xxx’
原因:有中文字符“” ; ,() :等 最多情况是空格(在windows里复制粘贴到Linux环境里)
char str1[100] = "abcdefghigklmn";
char *p1 = str1;
printf("%p", p);---------输出指针指向的地址(类似这种形式: 0xbfb4e34c)
printf("%s",*p1);-------发生段错误,输出类型不匹配,*p1是指针指向地址内的内容,即字符'a'
printf("%c",*p1);-------a
printf("%s", p1);---------abcdefghigklmn, 指针指向字符串首地址, printf读取字符串时读到终止符‘\0’再打印
printf("%c",*(p1+1));------b(地址往后移移一位的值)
printf("%c",*p1+1);-------b(*p的值加上1后所得的结果,如果*p+2,则输出c)
*p1+1 = ‘z’------------左值无效,指针指向字符串,字符串为常量不可直接赋值改变。
在gcc下用到数学函数,如sqrt。在gcc时要加上 -lm参数,这样告诉编译器我要用到数学函数了。
gcc编译,出现错误:为形参指定了存储类是什么原因----应该是你在声明函数、变量、结构体之类的东东的时候,语法有错误,请检查一下是不是哪里少了 ; 号之类的,或者头文件包含有没有出错~ 总之请检查语法错误~
不要用==来比较字符串和字符数组的大小,==会比较前后数据在内存中的地址,如果地址不同,数值就算一样编译器也不会认为二者相等,在定义字符数组是由系统分配内存地址空间,字符串常量在代码段,自己定义的字符数组变量在栈区,二者地址不会相同,最好用strcmp函数来比较两者(字符数组放前面比较好)
循环语句的后面不要加上习惯性加上;号,否则可能会造成段错误!!!(在你写的代码逻辑没问题语法没问题的情况下,发生段错误,看一眼循环语句后是否有;号)
举个例子 Node* p = head;//Node位链表的结点类型,head为头结点
while (p!= NULL);
{
p = p->next;//指针会一直往下个地址指,不会到NULL结束,编译报错:段错误
}
== 和 = 这两个符号含义用法很简单,但是还是要多注意,这两个混用的时候,有时编译不报错,但是程序上会存在错误,例如 外建函数
void change (int * num, int * count)
{
count == 0;
num = 1;
}
change函数运行结束后,引用change函数的函数(取名adc)中对应num的值变为1,对应count的值不变(没有变为0);
adc函数中如果需要用到count对应的值是0的话,则调用change函数的目的失败。(想让count的值变化,结果没变)。