문자열 갯수 세기?

반복문을 이용해서 문자열의 길이를 세는(출력하는) 프로그램을 만들어 보려고 합니다.
입력은 30자 이내구요
sizeof 를 이용하면 될 것 같긴 한데… 그게 확실하지도 않고 뭘 어떻게 만들어야 되는지 감도 안 잡힙니다.
도저히 생각이 안 나서 올려봅니다.

#include <stdio.h>
int main(){
  char ch[31];
  scanf("%s", &ch);
  /*for(int i = 0; i <= 30; i++){
  
}
*/
  return 0;
}
2 Likes

문자열의 끝은 '\0’인 것을 이용해보세요

2 Likes

정답입니당 ㅎㅎㅎ

근데 만약 null terminator가 없으면 어떡하죠?? ㄷㄷ

1 Like

문제 힌트로 그게 써있는데 뭔 뜻인지 이해를 못하는…

1 Like

C언어의 문자열은 char의 배열로 표현됨과 동시에 그 끝을 null값으로 표시하죠?

규칙입니당 ㅎㅎㅎㅎ

따라서 시작부터 null이 나올때까지 갯수를 세시면 되는거죠.
물론 null은 갯수에서 빼구용

1 Like

아마 버퍼 사이즈겠죠?

error를 리턴하는게 정답인거 같기도 하구요.

저거는 버퍼 사이즈가 정해져 있는데 char* 같은 형식으로 문자열을 받아 왔다면! 폭파!

하고 찾아보니까
https://en.cppreference.com/w/cpp/string/byte/strlen
는 그렇게 폭파되도록… 예시를 주네요.

2 Likes

실제로는 undefined behavior이지만 작성자님께서 스스로 고민해보는것도 좋은 경험일거라 생각해서 꺼내봤습니당 ㅎㅎㅎ

이 문제의 경우 최대크기가 정해져있어서 걱정없지만요 ㅎㅎㅎㅎ

1 Like

넴 작성자님께서 고민해보시면 좋은거 같네요.

2 Likes
#include <stdio.h>
	int main() {
	int i, sum = 0;
	char a[31];
	scanf("%s", a);
	for(i = 0; a[i] != NULL; i++){
		sum = i + 1;
}
	printf("%d", sum);
	return 0;
}

저는 역시 프로그래머로서 어딘가 부족한가 봅니다
배울건 다 배웠고 알 건 다 아는데도 그걸 써먹질 못하네요 ㅆ

tmi) 위에 코드도 사실 다른 누군가의 것을 베껴온 겁니다 :joy:

2 Likes

베껴온 코드라 해도 그 코드를 통해 몰랐던 부분을 다시 배우고 그렇게 배운 지식을 언젠가 써먹을 수 있지 않을까요?
제 생각에는 배울건 다 배웠다는 건 방법만 알면 무엇이든 할 수 있다는 것 같습니다.
힘내세요!

1 Like

null terminator 있으면 걍 strlen 씁시다…

3 Likes

포인터를 모른다고 가정하면

#include <stdio.h>

int main() {
    int size = 0;
    char ch[31];

    scanf("%s", ch);
    while(ch[size++] != '\0');
    printf("%d", size - 1);

    return 0;
}

@Seaurchin_08 님 말이 맞아요.
그리고 삽질하다보면 삽질을 적게하는 실력도 쌓여요.

1 Like

열심히 하시다보면 어느센가 익숙해지실겁니다. ㅎㅎㅎ
화이팅!!

1 Like