编译中的指针错误怎么修改
⑴ 用指向数组的指针时 出现错误,怎样解决。。。。
1、字符串的复制不能用等号的啊,要用strcpy:strcpy(*(p+max), *(p+x));
2、main中的循环for(int j=0;j<=n;j++),这个不对,应该没有等号,要不然要多一次循环
由于输入n后回车的问题可以在之前就把这个回车符干掉
3、sort中的y值应该从x+1开始,而且结果条件少了一个等号,你想啊,输入3个数的话,n-2为1,条件为 x<1 你写的程序只能比较一次,3个字符串如何一次能比较出结果?
4、直接给你贴上程序
void sort(char (*p)[20],int n)
{
for(int x=0;x<=n-2;x++)
{
for(int y=x+1;y<=n-1;y++)
{
if(strcmp(*(p+x),*(p+y))>0)
{
char tmp[20] = {0};
strcpy((char*)tmp, (char*)(*(p+x)));
strcpy((char*)(*(p+x)),(char*)(*(p+y)));
strcpy((char*)(*(p+y)),(char*)tmp);
}
}
}
}
int main()
{
int n;
char tmp[20];
char a[50][20],*p[50];
int i;
cout<<"请输入要排序的字符数组个数:";
cin>>n;
cin.getline(tmp,20);
for(i=0;i<n;i++)
p[i]=a[i];
for(i=0;i<n;i++)
cin.getline(p[i],20);
sort(a,n);
for(int j=0;j<n;j++)
cout<<a[j]<<'\n';
system("pause");
return 0;
}
⑵ C++语言指向函数的指针编译错误
#include<stdio.h>
#include<stdlib.h>
int main()
{
void operate(int,int,int(*)(int ,int));
int max(int , int),min(int , int );
int a,b;
printf("Please input two numbers:\n");
scanf("%d %d",&a,&b);
operate(a,b,max);
system("pause");
return 0;
}
int max(int a,int b)
{
if(a>b)
return(a);
else
return(b);
}
int min(int a,int b)
{
if(a>b)
return(b);
else
return(a);
}
void operate(int x,int y,int(*fun)(int ,int ))
{
printf("%d\n",(*fun)(x,y));
}
⑶ 求问c语言中 linux下编译 段错误 不知道哪的指针出错了
你没有为char* word指针分配内存,因此,指向原字符串中的某个位置。
但是,c字符串是必须以\0结尾的。
⑷ 函数指针问题:简单的C程序,不知道为什么编译报错,求高手解答啊,谢谢了!!
楼主你好
因为你自定义的函数filefunc、editfunc的返回值类型都是void型的
与你定义的函数指针的返回值类型int不匹配 所以将int改为void就行了
#include<stdio.h>
#include<stdlib.h>
void filefunc()
{
printf("njksjk\n");
}
void editfunc()
{
printf("nsjknjk\n");
}
int main()
{
typedef void (*funcp)();//void改为int
funcp p=filefunc;
p();
p=editfunc;
p();
system("pause");
return 0;
}
希望能帮助你哈
⑸ C语言中的指针问题
这样的"xxxx"应该叫做字符串常量,是存储在常量区域的,所以不应该修改它。
char a[]="don't know"
是定义了一个数组,数组内的数据复制了字符串的内容。
char *a="don't know"
第二种编译的时候就应该给你警告了,不能用非常量指针指向一个常量,应该是这样
const char *a="don't know"
所以不能通过指针改变它。
⑹ 函数返回指针编译错误
L可以当数组一样用,可以用L[0]的方式访问
至于为什么出错,要看你的程序是怎么写的,请写出你的程序。
********************************************
L = (char*)malloc((n1+2)*sizeof(char));
改为
L = malloc((n1+2)*sizeof(char));
R = (char*)malloc((n2+2)*sizeof(char));
改为
R =malloc((n2+2)*sizeof(char));
int n1,n2,i,j; char* L,R;
改为
int n1,n2,i,j; char* L,*R;
⑺ keil中结构体函数指针编译错误
lcd_write_data是进行寄存器操作,不能用指针,再写一个函数实现字符串
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x); //表示第一行
}
else
{
LCD_Write_Com(0xC0 + x); //表示第二行
}
while (*s)
{
LCD_Write_Data( *s);
s ++;
}
}
⑻ 懂c语言的来看看,编译通不过了,小弟实在找不出错误! 指针部分
1.getch()要加头文件#include <conio.h> 也可以用 getchar()
2.楼主 注释是用// 不是\\( \\错误 .c 50: 非法地使用浮点数在 find 函数中 \\→//)
3.定义的float *find(float (*p)[4])函数体中 float *po,i;
改成float *po;int i;
否则i不能自加自减,导致下面的 for(i=0;i<4;i++)不能执行
⑼ C语言指针问题 编译的时候报错
你的p1指针都没有初始化,即你的p1指针都没指向某个字符数组你就对它所指向的内存单元赋值,这在运行时肯定会出现你上面的错误的,所以,你要如下这样做:
char b[100]; //定义一个字符数组b
p1=b;
.......
在第二个for循环前面,你还要使指针p1重新指向字符数组b的首元素地址,即
p=b;
.......
if(p1+i != p1+m-1-i) //这个判定条件也是错的,p1是指针,指针是地址,不是指针所指向的内存单元的值,你这比较的是地址值是否相等,当然是不相等呀,应该改成:
if(*(p1+i) != *(p1+m-1-i)) //这才是指针所指向的内存单元的值的比较