哪個大神告訴我我錯哪里了

#include <stdio.h>
#include <string.h>
main ()
{
char *t;
int i,j,n,p;
char *s[]={"pescal","basic","fortran","turbo C"};
printf("Enter n:");
scanf ("%d",&n); /*輸入待排序字串的個數n*/
for (i=0;i<n-1;i++) /*用冒泡排序法*/
{
for (j=0;j<n-1-i;j++)
{
if (strcmp (s[j],s[j+1])>0)
{
strcpy (t,s[j]); strcpy (s[j],s[j+1]); strcpy (s[j+1],t);
}
}
}
printf ("%d",p);
for (i=0;i<n;i++)
{
printf ("%s\n",s[i]);
}
return 0;
}
uj5u.com熱心網友回復:
#include <stdio.h>
#include <string.h>
main ()
{
char *t;
int i,j,n;//,p;
unsigned int arr_len;
//char *s[]={"pescal","basic","fortran","turbo C"};
const char *s[]={"pescal","basic","fortran","turbo C"};
printf("Enter n:");
scanf ("%d",&n); /*輸入待排序字串的個數n*/
arr_len = sizeof(s) / sizeof(s[0]);
if (n > arr_len)
n = arr_len;
for (i=0;i<n-1;i++) /*用冒泡排序法*/
{
for (j=0;j<n-1-i;j++)
{
if (strcmp (s[j],s[j+1])>0)
{
t = (char *)s[j];
s[j] = s[j+1];
s[j+1] = t;
//strcpy (t,s[j]);
//strcpy (s[j],s[j+1]);
//strcpy (s[j+1],t);
}
}
}
//printf ("%d",p);
for (i=0;i<n;i++)
{
printf ("%s\n",s[i]);
}
return 0;
}
供參考~
樓主的問題主要是對s指標的理解,樓主定義的是指標陣列,即每個元素都是指標,而每個指標都指向了只讀資料段上的字串,而樓主在排序時對只讀資料進行了寫操作,所以應該會出現多錯誤~
直接交換指標指向的位置即可~
其他問題詳見代碼~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/193103.html
標籤:C語言
