在C语言中经常需要处理内存问题,特别是在字符串操作时特别容易出错。
下面分析几种常见问题,都是经常引发内存错误或者Segmentation fault这些隐形错误。
1.比较几种字符串
char a[] = "1234";//可更改字符串,有占5字节,结尾为‘\0'
char a[4] = "1234";//可更改字符串,有占4字节;
char* a = "1234";//不可更改字符串,有占5字节,结尾为‘\0'
char* a = (char *) malloc(4);//可更改字符串,有占4字节;
2.字符串函数使用.
常见容易出问题的有strcpy,strncpy,strcat,strncat;理解了如上区别后可以知道,
这些函数的第一个参数都必须使用确定内存数量的字符串来承载,这里还会
涉及一些初始化问题,如下例子:
char cmd[10];
char cmdt[3] = "123";
strcat(cmd,cmdt);
运行结果将会时cmd[0]将会是一个乱码,原因时初始化时cmd[0]是一个'\0',拼接时与cmdt[0]‘拼’起来了。
3.字符串转换
其他类型转字符串转换主要的主要用的一个神奇的函数:sprintf();
使用方法很简单,来个简单的例子:
char c = 'a';
int i = '1';
char s[4] ;
sprintf(s,"%c%d",c,i);