#include <stdio.h>
int main()
{
char * str[3];
int i;
for (i = 0; i < 3; i++)
{
scanf("%s", &str[i]);
}
for (i = 0; i < 3; i++)
{
printf("%s\n", str[i]);
}
}
문자열 입력받아서 출력하려는데 왜안되는지 이유점여....
#include <stdio.h>
int main()
{
char * str[3];
int i;
for (i = 0; i < 3; i++)
{
scanf("%s", &str[i]);
}
for (i = 0; i < 3; i++)
{
printf("%s\n", str[i]);
}
}
문자열 입력받아서 출력하려는데 왜안되는지 이유점여....
첫번째 for문에서 %s를 %c로 바꾸셈
문자가 아니라 각각 문자열을 하나씩 받고싶으면 어떻게 짜야되죠?
아 내가 잘못봤다 선언을
매번 for문마다 동적할당을 해야 함
포인터는 어떤 메모리의 시작 주소를 참조하는데, 저긴 포인터만 달랑 3개 선언했을 뿐이야. 니 컴퓨터가 32비트 CPU라면 문자열이 얼마나 길던 짧던 상관없이 4바이트일거고 64비트 CPU라면 8바이트겠지.
char str[100]; 이렇게 했을때에는 char이 1바이트라면 100바이트 할당되는게 맞아. 지역변수로 할당하는거니까.
반면에 char* str[3]; 했을 때에는 4바이트 *3 해서 12바이트만 할당되는거지. 그리고 저장되는 값도 문자열이 아니라 문자열의 시작 주소를 참조할 뿐이야. malloc 같은 함수 써야 함
답변감사드립니다. 근데 char*s [] 이렇게 배열 선언하면 각각 문자열의 시작주소를 저장할수있는거아닌가요?
scanf("%s", str[i]); 이런식으로 &는 빼야 할 걸.. C를 안한지는 오래되서 가물가물한데 확인해봐. 일단, scanf는 문자열을 입력받아서 str[i] 에다 복사만 해줄뿐이야. 니가 입력한 문자열만큼의 저장공간은 마련해주지 않음
일단 복잡함을 해결하는 방법 중의 대표적인 것은 단순하게 가는것이다. 우선 char * str = (char *)malloc(sizeof(char)*100); 이런식으로 하고 해보라는
char* s[] 요거 선언 자체가 안될텐데 -_- 함수 매개변수로 할때나 선언 가능한거고 그거야 인수로 넘길떄 바인드 되는 형태니깐 그리고 안될떄는 3개 말고 하나만 받아보려고 해보면 답 나오는데 한 문자열만 받는것도 안될겁니다 공간 없어서
얘 걍 프로그램 이따구로 짜놓은거 보면 기본개념도 없는거같은데 책이나 더 보라고 하는게 도움될듯
그리고 char *a[3]; 이건뭐지 ㅋㅋㅋ