2014-03-14 86 views
0
#include<stdio.h> 
#include<string.h> 
#include<malloc.h> 
int main() 
{ 
    char *name; 
    int a; 
    name=(char *)malloc(sizeof(name)); 
    printf("no. of names:"); 
    scanf("%d",&a); 
    int i; 

    for(i=0;i<a;i++) 
    { 
     printf("enter the names:"); 
     scanf("%s",name); 

    } 

    for(i=0;i<a;i++) 
    { 
     printf("entered names are:%s\n",name); 
    } 

    return 0; 
    free(name); 
} 

如何在c中輸入n個輸入的字符串我已經問過這個問題,但我沒有得到任何正確的答案任何機構知道答案請編輯我的代碼,如果你運行我的代碼,它的顯示最後一個字符串,我不知道爲什麼請幫助..如何在c中打印n個字符串?

回答

1

您需要一個名稱數組。要實現您正在嘗試執行的操作,可以使用最大尺寸的靜態數組,也可以按照以下程序的方式分配內存。 請注意,您還應該測試malloc的返回值......以防萬一。

#include<stdio.h> 
#include<string.h> 
#include<malloc.h> 
int main() 
{ 
    char **name; 
    int a; 
    printf("no. of names:"); 
    scanf("%d",&a); 
    int i; 
    if(a<=0) 
     return 0; 
    name = (char**)malloc(sizeof(char*)*a); 
    for(i=0;i<a;i++) 
    { 
     printf("enter the name:"); 
     name[i]=(char*)malloc(sizeof(char)*128); 
     scanf("%s",name[i]); 
    } 
    for(i=0;i<a;i++) 
    { 
     printf("entered names are:%s\n",name[i]); 
     free(name[i]); 
    } 
    free(name); 
    return(0); 
} 

注意我不得不投malloc的,因爲在OP使用引發錯誤的編譯器「無法從‘無效’轉換爲‘字符**’」(這意味着它很老..)

+0

錯誤C2440:'=':無法從'void *'轉換爲'char **' 從'void *'轉換爲非''空''指針需要明確轉換 錯誤C2440:'=':無法轉換從'void *'到'char *' 從'void *'轉換爲指向非'空'的指針需要明確的轉換 執行cl.exe時出錯。 –

+0

好吧,我會施放它......你使用的是什麼樣的編譯器......它一定是比 – Jekyll

+0

@ R.A做得更老,通過現代編譯器不需要的方式完成了施法,修改了答案......。你使用什麼編譯器? – Jekyll

0

name=(char *)malloc(sizeof(name)); 

名稱是char*,所以sizeof(name)是一個地址的大小。因此你沒有分配足夠的內存。

就分配更多的內存:

name=(char *)malloc(sizeof(char)*20); //allocating 20 bytes for the block that name will point tor 
+0

可以編輯我的代碼嗎?請@brokenfoot –

+0

我無法編輯該問題,只需將粘貼複製到您的編輯器。我告訴過你需要更換哪條線。 – brokenfoot

+0

他的應用程序在任何情況下都不起作用,因爲他需要一個名稱數組,其他方式第二個循環將始終顯示最後填充的名稱。 – Jekyll

0

除了錯誤的空間分配(由brokenfoot回答),你不會得到你想要的,因爲你是在同一個變量一遍又一遍地閱讀所有的名字結果name,後來打印名稱輸入最後a時間:

for(i=0;i<a;i++) 
{ 
    printf("enter the names:"); 
    scanf("%s",name); 
} 
for(i=0;i<a;i++) 
{ 
    printf("entered names are:%s\n",name); 
} 

正確的方法是使用一個數組來存儲所有的名字,後來由一個打印出來的。例如:

for(i=0;i<a;i++) 
{ 
printf("Enter the names:") 
scanf("%s",name[a]); 
} 

print("The entered names are: "); 
for(i=0;i<a;i++) 
{ 
printf("%s", name[a]); 
} 
+0

name [a]我的程序崩潰,如果我運行你的程序只關閉我的編譯器@lawrence –

+0

我提供的代碼不是最終的解決方案。你不能直接使用它,它只是你理解你需要做什麼的一個例子。您應該首先正確地聲明名稱數組,然後使用它。看起來你只是在沒有理解問題的努力下尋找完整的解決方案。 – bosnjak