각 문자가 별도로 유지되는 C의 배열에 문자열을 저장하는 방법에 대해 난처합니다. 예를 들어, 사용자 입력하면 hellop
, 나는 주어진 배열에 저장하고 싶은 말 userText
과 함께, userText[0] = h
, userText[1] = e
, userText[2] = l
, 등. 나는 이것이 쉬운 일이라는 것을 알고 있지만 여전히 새로운 것입니다. 누구든지 도울 수 있다면 좋을 것입니다. 포인터를 사용하여이를 수행하는 방법을 설명하십시오.
#include<stdio.h>
void main()
{
char a[10],c;
int i=0;
while((c=getchar())!='\n')
{
scanf("%c",&a[i++]);
c=getchar();
}
for(i=0;i<11;i++)
printf("%c",a[i]);
}
를 입력하면 프로그램이 일부 가비지 값 ( eoeoeoeo\363
)을 출력 hellop
합니다.
입력을 읽으려면 fgets 함수를 사용하는 것이 좋습니다 . .NET Framework의 훌륭하고 안전한 대안 scanf
입니다.
먼저 다음과 같이 버퍼를 선언합시다.
char user_input[20];
그러면 다음과 같은 방식으로 명령 줄에서 사용자 입력을 얻을 수 있습니다.
fgets(user_input, 20, stdin);
이렇게하면 표준 입력 에서 문자열에 최대 20 개의 문자가 저장 되며 null로 종료됩니다 . 이전에 선언 된 배열의 크기로 입력을 제한했기 때문에 버퍼 오버런 가능성이 없습니다.
그런 다음 strlen을 사용하여 문자열에 입력 된 성가신 개행 문자를 지 웁니다 .
user_input[strlen(user_input) -1] = '\0';
As strlen
는 null 종결 자 까지 문자열의 크기를 반환 하지만 그것 없이는 그 위치에 개행 문자 ( \n
) 가 있는지 확인할 수 있습니다 . \0
문자열이 거기서 끝나도록 null-terminator ( )로 대체합니다 .
마지막으로 printf를 사용하여 인쇄 해 봅시다 .
printf("The user has entered '%s'\n", user_input);
사용 fgets
하고 printf
다음과 같은 헤더를 선언해야합니다 :
#include <stdio.h>
들어 strlen
우리는, 즉 다른 헤더를해야합니다 :
#include <string.h>
완료되었습니다.
추신 : 질문에 추가 한 코드를 알려 드릴 수 있습니다.
main
일반적으로 어떤 종류의 값 을 반환하는 int main
것이 아니라 일반적으로 선언됩니다 . 작은 앱의 경우 일반적으로 닫는 중괄호 바로 앞에 배치됩니다. 이 반환은 프로그램이 성공적으로 실행되었는지 OS에 표시하는 데 사용됩니다 (0은 모든 것이 정상임을 의미하고 0이 아닌 것은 문제가 있음을 의미).void main
main
return 0;
문자열을 null로 종료하지 않습니다. 즉, 신중한 루프가 아닌 다른 방법으로 읽으면 문제가 발생합니다.
당신은 사용자로부터 입력을 두 번 -에 한 번 getchar
다음에 scanf
.
코드 사용을 고집한다면 약간 수정했습니다.
#include<stdio.h>
int main()
{
char a[10];
int i=0;
while( (a[i++]=getchar()) != '\n' && i < 10) /* take input from user until it's a newline or equal to 10 */
;
a[i] = '\0'; /* null-terminate the string */
i = 0;
while(a[i] != '\0') /* print until we've hit \0 */
printf("%c",a[i++]);
return 0;
}
이제 작동합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다