29
社区成员




分享一个容易出错的地方,比如交换两个字符串的值
错误的写法如下:
#include<stdio.h>
void swap(char * str1,char * str2){
char * temp=str1;
str1=str2;
str2=temp;
}
int main(){
char *str1="hello";
char *str2="world";
swap(str1,str2);//交换字符串str1、str2的值
printf("%s %s\n",str1,str2);
return 0;
}
发现两个字符串的值没有交换:
分析:想要通过函数修改main函数局部变量的值,需要使用指针;想要通过函数修改main函数指针变量的值,需要使用指向指针的指针
正确的写法如下:
#include<stdio.h>
void swap(char ** pstr1,char ** pstr2){
char *temp=*pstr1;
*pstr1=*pstr2;
*pstr2=temp;
}
int main(){
char *str1="hello";
char *str2="world";
swap(&str1,&str2);//交换字符串str1、str2的值
printf("%s %s\n",str1,str2);
return 0;
}
好久没写C语言了,我就记得几个常见的错误:
1.scanf读入的变量没有使用&
scanf("%d%f",&v1,&v2); //读入多个变量
scnaf("%s",str); //str是一个字符数组
scanf("%s",p->name); //读入结构体的一个分量(char name[20];),p是指向一个结构体变量的指针
scanf("%d",&(p->data));//读入结构体的一个分量(int data;),p是指向一个结构体变量的指针
2.scanf读入字符或字符串没有清空缓冲区,吃到了空格或者回车
3.死循环,因为偷懒直接复制粘贴for语句,但是又没有把循环判断条件和增量表达式修改完全
for(i=0;i<10;i++)
for(j=0;j<20;i++)//正确写法为for(j=0;j<20;j++)
4.for语句和if分支语句没有用{}括起来,有可能陷入死循环或者执行的结果错误
5.处理字符串的时候没有在结尾加'\0',结果出现了一堆乱码
6.关于链表的操作,没有考虑到链表首节点的变动要修改head的值。当然,如果使用了哨兵节点就不用考虑这么多了
7.函数返回的时候会把函数声明的局部变量的空间释放掉,所以想要通过函数修改main函数的变量得使用指针或利用return返回值
8.还有指针这一块,指向指针的指针,指针和整数的运算,指针和数组等等