advance_lion 领风者 2021-12-14 08:36:20
大家可以分享一下,初学 c语言的时候会犯什么错吗,我就犯过数组初赋值的错a[10]={1}实际上只把第一个元素赋值为1,之后的全赋值为0
...全文
241 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
易水卷长空 开区元老 2021-12-14
  • 打赏
  • 举报
回复 1

分享一个容易出错的地方,比如交换两个字符串的值
错误的写法如下:

#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;
}

发现两个字符串的值没有交换:

img

分析:想要通过函数修改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;
}

img

立本 社区贡献者 2021-12-14
  • 打赏
  • 举报
回复 1

好久没写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.还有指针这一块,指向指针的指针,指针和整数的运算,指针和数组等等

1. C 语言中的指针和内存泄漏 5 2. C语言难点分析整理 10 3. C语言难点 18 4. C/C++实现冒泡排序算法 32 5. C++中指针和引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38 8. C程序内存中组成部分 41 9. C编程拾粹 42 10. C语言中实现数组的动态增长 44 11. C语言中的位运算 46 12. 浮点数的存储格式: 50 13. 位域 58 14. C语言函数二维数组传递方法 64 15. C语言复杂表达式的执行步骤 66 16. C语言字符串函数大 68 17. C语言宏定义技巧 89 18. C语言实现动态数组 100 19. C语言笔试-运算符和表达式 104 20. C语言编程准则之稳定篇 107 21. C语言编程常见问题分析 108 22. C语言编程易犯毛病集合 112 23. C语言缺陷与陷阱(笔记) 119 24. C语言防止缓冲区溢出方法 126 25. C语言高效编程秘籍 128 26. C运算符优先级口诀 133 27. do/while(0)的妙用 134 28. exit()和return()的区别 140 29. exit子程序终止函数与return的差别 141 30. extern与static存储空间矛盾 145 31. PC-Lint与C\C++代码质量 147 32. spirntf函数使用大 158 33. 二叉树的数据结构 167 34. 位运算应用口诀和实例 170 35. 内存对齐与ANSI C中struct内存布局 173 36. 冒泡和选择排序实现 180 37. 函数指针数组与返回数组指针的函数 186 38. 右左法则- 复杂指针解析 189 39. 回车和换行的区别 192 40. 堆和堆栈的区别 194 41. 堆和堆栈的区别 198 42. 如何写出专业的C头文件 202 43. 打造最快的Hash表 207 44. 指针与数组学习笔记 222 45. 数组不是指针 224 46. 标准C中字符串分割的方法 228 47. 汉诺塔源码 231 48. 洗牌算法 234 49. 深入理解C语言指针的奥秘 236 50. 游戏外挂的编写原理 254 51. 程序实例分析-为什么会陷入死循环 258 52. 空指针究竟指向了内存的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55. 连连看AI算法 274 56. 连连看寻路算法的思路 283 57. 重新认识:指向函数的指针 288 58. 链表的源码 291 59. 高质量的子程序 295 60. 高级C语言程序员测试必过的十六道最佳题目+答案详解 297 61. C语言常见误 320 62. 超强的指针学习笔记 325 63. 程序员之路──关于代码风格 343 64. 指针、结构体、联合体的安规范 346 65. C指针讲解 352 66. 关于指向指针的指针 368 67. C/C++ 误区一:void main() 373 68. C/C++ 误区二:fflush(stdin) 376 69. C/C++ 误区三:强制转换 malloc() 的返回值 380 70. C/C++ 误区四:char c = getchar(); 381 71. C/C++ 误区五:检查 new 的返回值 383 72. C 是 C++ 的子集吗? 384 73. C和C++的区别是什么? 387 74. 无条件循环 388 75. 产生随机数的方法 389 76. 顺序表及其操作 390 77. 单链表的实现及其操作 391 78. 双向链表 395 79. 程序员数据结构笔记 399 80. Hashtable和HashMap的区别 408 81. hash 表学习笔记 410 82. C程序设计常用算法源代码 412 83. C语言有头结点链表的经典实现 419 84. C语言惠通面试题 428 85. C语言常用宏定义 450

29

社区成员

发帖
与我相关
我的任务
社区描述
欢迎吉大的兄弟姐妹加入CFJLU( Computer Fans of JLU)!
社区管理员
  • 易水卷长空
  • 卷儿~
  • 十小大
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎你加入Java修仙的大家庭,社区为各位同学提供以下服务:

  • 【---讨论---】 发布提问,交流技术
  • 【--技术栈-】 技术栈是多种技术的组合,包括前后端、中间件(数据库等) 、工具、框架、操作系统等等。分享自己的项目经验、做项目时遇到的困难等
  • 【课程相关】分享专业课程的学习笔记、知识点总结,或者是往年试题的解析
  • 【学习记录】记录每天的学习收获、读书打卡等
  • 【博文推荐】分享你的原创博文,(如要转载博文需征求原作者同意)

对于优质的帖子和资源,管理员会将其设为【精选】,同时社区也支持同学们自主申请加精。

此外若有什么意见或建议,请私聊管理员@易水卷长空。

最后,请开始你的社区之旅吧!

试试用AI创作助手写篇文章吧