編譯中的指針錯誤怎麼修改
⑴ 用指向數組的指針時 出現錯誤,怎樣解決。。。。
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)) //這才是指針所指向的內存單元的值的比較