c语言打印字符乱码和char *字符循环赋值时“段错误 (核心已转储)”问题解决
来源:互联网 发布:淘宝达人如何发布清单 编辑:程序博客网 时间:2024/04/27 20:50
1.打印字符乱码
主要是分函数分配的空间在栈里面(tmp和tmp指向的字符串内容),分函数结束后栈销毁,空间全部释放。
如果改成char *tmp则不会乱码,函数里面的变量(tmp)还是在栈里面,但是tmp指向的字符串内容则分配在堆中,
分函数结束后栈销毁,空间全部释放。但tmp指向的字符串内容还存在,SYM中存了地址,可以访问。
不过这部分堆空间已经是未分配的空间(垃圾空间),随时可以被再次分配。所以虽然可以访问但是不安全。
如果必须使用,则把char tmp[10]在函数外面定义。
2.char*单个字符赋值
#include <stdio.h>#include <string.h>char *SYM="";void change(){ char tmp[10]="SYM"; printf("%d\n",tmp); SYM=tmp;}int main(int argc, char *argv[]){ change(); printf("%d\n",SYM); printf("%s\n",SYM); return 0;}
解决方案:
主要是分函数分配的空间在栈里面(tmp和tmp指向的字符串内容),分函数结束后栈销毁,空间全部释放。
如果改成char *tmp则不会乱码,函数里面的变量(tmp)还是在栈里面,但是tmp指向的字符串内容则分配在堆中,
分函数结束后栈销毁,空间全部释放。但tmp指向的字符串内容还存在,SYM中存了地址,可以访问。
不过这部分堆空间已经是未分配的空间(垃圾空间),随时可以被再次分配。所以虽然可以访问但是不安全。
如果必须使用,则把char tmp[10]在函数外面定义。
2.char*单个字符赋值
#include <stdio.h>#include <malloc.h>char *p="";int main(){ int i; //p=(char*)malloc(8); for(i=0;i<7;i++) { p[i]='a'; } p[i]='\0'; printf("%s\n",p); return 0;}
解决方案:
本程序编译正常,运行提示“段错误 (核心已转储)”,char *未分配内存空间,所以不能操作数组,也就是不能单个字符来赋值。必须要用内存来分配空间。即注释部分去掉注释,给指针分配内存,则就可以操作了。- c语言打印字符乱码和char *字符循环赋值时“段错误 (核心已转储)”问题解决
- 段错误 (核心已转储) 字符指针 ubuntu
- ubuntu C 语言 段错误 (核心已转储)
- ubuntu C 语言 段错误 (核心已转储)
- C语言 非打印字符
- c语言二维字符数组的初始化和赋值
- C语言字符char和整型int的关系
- c语言使用DES_ncbc_encrypt以及段错误 (核心已转储) 解决
- C语言再学习 -- 段错误(核心已转储)
- C语言再学习 -- 段错误(核心已转储)
- c语言中的字符数组赋值
- C语言中字符数组赋值方法
- C语言字符指针赋值的问题
- C语言中char字符为0时的情况
- c语言中:字符 char的描述
- IOS开发---C语言-⑧字符char
- 35 C语言中的字符(char)
- C语言char单字符、字符串、字符数组(二)
- spring MVC配置文件解读
- mstpscap分析之先行知识
- Hadoop内置作业调度器与调度平台的集成
- 《AS3 Expert》_15 Flash Player的垃圾内存回收机制:能否强制回收?
- 批量删除 Oracle当前用户的数据表。
- c语言打印字符乱码和char *字符循环赋值时“段错误 (核心已转储)”问题解决
- mk中的android:sharedUserId和LOCAL_CERTIFICATE作用
- MySql数据库死锁deadlock
- 我们的资源和优势是什么——凡事都要争取一下
- linux执行sh文件
- laptop linux重装 指南
- 《疯狂的程序员》一
- 距离变换(cvDistTransform)
- 软件用例设计中的结构设计