2014-03-14 3 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); 
} 

입력 된 문자열의 n 개의 숫자를 출력하는 방법은 이미이 질문에 답을 얻었으나 답변을 알고있는 몸은 아무 것도 없습니다. 내 코드를 편집하십시오. 내 코드를 실행하면 마지막 문자열 만 표시됩니다. 왜C에서 n 개의 문자열을 출력하는 방법은 무엇입니까?

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

이름으로 ..

답변

1

이름 배열이 필요합니다. 당신이하려고하는 것을 달성하기 위해서 당신은 최대 크기를 가진 정적 배열을 사용하거나 다음 프로그램 에서처럼 메모리를 동적으로 할당 할 수 있습니다. malloc ...의 반환 값도 테스트해야합니다. 나는 OP는 오류가 발생 사용하는 컴파일러가 "에 '무효'에서 변환 할 수 없습니다 '문자 **'"때문에 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); 
} 

주 (그것은 충분히 오래 것을 의미합니다 ..)

+0

오류 C2440 : '=': 'void *'에서 'char **'로 변환 할 수 없음 'void *'에서 'void '가 아닌 포인터로 변환하면 명시 적 캐스트가 필요함 오류 C2440 :'= ': 변환 할 수 없습니다. 'void *'에서 'char *' 'void *'에서 'void '가 아닌 포인터로의 변환은 명시 적 형 변환이 필요합니다. cl.exe 실행 중 오류가 발생했습니다. –

+0

ok 나는 그것을 캐스팅 할 것이다 ... 어떤 종류의 컴파일러를 사용하고 있는가? – Jekyll

+0

@ R.A가 주조를 완료하고 대답을 수정했다 ... 현대 컴파일러가 필요로하지 않는 방식으로 매우 오래되었다. 어떤 컴파일러를 사용하고 있습니까? – Jekyll

0

도와주세요 것은 너무 sizeof(name)가 주소의 크기하는 char*입니다. 따라서 충분한 메모리를 할당하지 않습니다.

그냥 더 많은 메모리를 할당 :

(brokenfoot 응답) 잘못된 공간 할당뿐만 아니라, 당신은 당신이 같은 변수에 반복해서 모든 이름을 읽기 때문에 당신이 원하는 결과를 얻을 수 없습니다에서
name=(char *)malloc(sizeof(char)*20); //allocating 20 bytes for the block that name will point tor 
+0

내 코드를 편집 할 수 있습니까? 제발 @brokenfoot –

+0

질문을 편집 할 수 없습니다, 그냥 편집기에 붙여 넣기 복사하십시오. 대체해야 할 선을 알려 줬어. – brokenfoot

+0

두 번째 루프에 항상 마지막으로 채워진 이름이 표시되는 다른 방법으로 이름 배열이 필요하기 때문에 그의 응용 프로그램이 작동하지 않습니다. – Jekyll

0

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

이름 [a] 내 컴파일러를 닫으면 내 프로그램이 충돌합니다 @lawrence –

+0

제공된 코드는 최종 해결책이 아닙니다. 당신은 단지 그것을 그대로 사용할 수 없으며, 당신이해야 할 일을 이해하는 예일뿐입니다. 먼저 이름 배열을 올바르게 선언 한 다음 사용해야합니다. 문제를 이해하지 않고도 완벽한 솔루션을 찾고있는 것 같습니다. – bosnjak

관련 문제