C语言,关于数组元素为空时的判断问题
我是搞java的,不过对C有兴趣!
有一个人,就在前不久写了个C代码,
对比while(*dst++ = *src++)和loop : if(*src!='\0'){*dst = *src ;dst++,src++;goto loop;}*dst='\0';的代码。
我顺势一有兴趣,也写了一个,但发现问题。
问题:
我不知道怎么判断数组是否为空!
首先请看代码
#include<stdio.h>
#include<string.h>
int main()
{
char a[5] = {'a','b','c','d','e'};
char b[5] ;
void doConvert(char *, char *);
doConvert(b,b);
{
int temp_i = 0 ;
for(;temp_i<5;temp_i++)
printf("%c ",b[temp_i]);
}
getchar();
return 0 ;
}
void doConvert(char *dst, char *src)
{
if(*src = '\0' || *src = (void*)0)//问题:为什么这一步没有输出null
{
printf("null");
return;
}
//------以下赋值
*dst = *src ;//首位赋值
while(*++dst = *++src)//此处首位未赋值
;
*dst = '\0';
}
问题:
我不知道怎么判断数组是否为空,这个代码里面if(*src = '\0' || *src = (void*)0)这个写法显然
是相当失败的!
没想到自从搞了JAVA,我的C退化成这样。
1、求解释错误!
2、求在我源代码基础上修改代码错误修改
[解决办法]
*src = '\0'是赋值,不是比较
*src == '\0'这样才是比较
[解决办法]
if(*src = '\0'
[解决办法]
*src = (void*)0) 这样
if(*src == '\0'
[解决办法]
*src == (void*)0)
[解决办法]
而且*src == (void*)0这句应该不对
src是字符指针,不应与void类型比较吧
[解决办法]
C/c++中 = 表示赋值,== 才是判断是否相等
另外函数处理前最好先判断一下那两个指针是否为NULL
并且目标指针指向的空间如果小于源,那么会出现数组越界错误
*dst = *src ;//首位赋值
这句可以不要
while(*++dst = *++src)//此处首位未赋值
------------
改为
while(*dst++ = *src++) // 先进行赋值,然后各自的指针+1,进行下一个
[解决办法]
我也不会,顶一个
[解决办法]
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
电脑内存只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
[解决办法]
*dst++ = *src++ 这里赋值到‘\0’的时候循环就退出了
[解决办法]
可以用src[0] == '\0'来判断字符串数组是否为空。
[解决办法]
赋值和比较是不同的,代码中判断是否为空时用了=是赋值了,不是比较。
[解决办法]
"*dst++ = *src++是有副作用"有什么副作用?