[英]Why am I getting segmentation fault for the following code?
問題是要按字母升序對給定的字符串輸入進行字母排序。 我為相同的代碼編寫了以下代碼。 但是,在打印輸入的名稱后,該程序而不是對字符串進行排序會產生分段錯誤。 我在這個問題上花了很多時間,但什么也沒辦法。 任何幫助,將不勝感激。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int x,i,j,length;
printf("Enter the number of names you want to sort.\n");
scanf("%d",&x);
char *names[x],*p,name[50],*t;
printf("Enter the names:\n");
for(i=0;i<x;i++)
{
scanf(" %[^\n]",name);
length = strlen(name);
p = (char *)malloc(length+1);
strcpy(p,name);
names[i] = p;
}
printf("Entered names are:\n\n");
for(i=0;i<x;i++)
{
printf("%s\n",names[i]);
}
printf("\n\nThe sorted names are:\n");
for(i=0;i<x-1;i++)
{
for(j=i+1;j<x;j++)
{
if(strcmp(names[i],names[j])>0)
{
strcpy(t,names[i]);
strcpy(names[i],names[j]);
strcpy(names[j],t);
}
}
}
for(i=0;i<x;i++)
{
printf("%s\n",names[i]);
}
return 0;
}
您沒有分配t
因此strcpy(t,names[i])
會出現段錯誤。
您還可以使用strdup()
1復制字符串(而不是malloc()
和strcpy()
)。
而且,由於數組是char*
元素,因此可以直接交換它們:
t=names[i];
names[i]=names[j];
names[j]=t;
關於指針的問題,您可以將指針視為uint32_t
:它們是可以分配的“公正”值,例如常規整數。只是將其值解釋為地址,而不是隨機整數(即,其值具有特殊含義)。對計算機的意義,因為它與內存緊密相關)。
1 :正如@WhozCraig所指出的那樣, strdup()
並非標准庫的一部分,因此您必須#include
適用於您平台的標頭(盡管它確實廣泛傳播,但幾乎沒有問題)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.