c语言的,void指针不能++,那该怎么改?
#include<stdio.h>#include<conio.h>voidadd(void*buf1);intmain(){charbuf1[20];scanf("%s...
#include<stdio.h>
#include<conio.h>
void add(void*buf1);
int main()
{
char buf1[20];
scanf("%s",buf1);
add(buf1);
return 0;
}
void add(void*buf1)
{
int x=0;
char z;
while(1)
{
if(*((char*)buf1)=='\0')
break;
x++;
((char*)buf1)++;
}
printf("%d",x);
} 展开
#include<conio.h>
void add(void*buf1);
int main()
{
char buf1[20];
scanf("%s",buf1);
add(buf1);
return 0;
}
void add(void*buf1)
{
int x=0;
char z;
while(1)
{
if(*((char*)buf1)=='\0')
break;
x++;
((char*)buf1)++;
}
printf("%d",x);
} 展开
3个回答
展开全部
void * 表示任意类型指针,或叫不确定类型指针
当指针变量进行++时,会后移相应类型数据的宽度,如:
char *p ; p++ 向后移动一个char类型空间,即:1字节
int *p; p++ 向后移动一个int类型空间,即:4字节
而void *p; 类型不确定,所以,程序无法判定要怎么改变指针变量的值。
vc6报错:error C2036: 'void *' : unknown size
因此,程序要根据实际变量数据类型进行强制转换后才可以使用,而且不能使用void *变量本身!如:
//本代码没有实际意义,仅在说明问题。 该代码在vc6编译不通过!
void prt( void *str )
{
while( *((char*)str) != '\0' ) //强制转换类型,进行数据引用
{
putchar( *((char*)str) );
str++; //error C2036: 'void *' : unknown size
}
}
修正后的代码(所有系统均编译运行正常):
void prt( void *str )
{
char *s=(char *)str ;//重新定义一个实际类型数据指针变量,指向该地址
while( *s != '\0' )
{
putchar( *s );
s++;
}
}
展开全部
void add(void*buf1)
{
int x=0;
char z;
while(1)
{char *s=(char*)buf1;//转换
if(*s=='\0')
break;
x++;
s++;
}
printf("%d",x);
}
{
int x=0;
char z;
while(1)
{char *s=(char*)buf1;//转换
if(*s=='\0')
break;
x++;
s++;
}
printf("%d",x);
}
追问
char *s=(char*)buf1要放出while循环才对。
追答
嗯
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询