2009-06-06 5 views
1

Arduino를 사용하는 프로젝트에서 작업 중이므로 직렬 포트 (int)를 읽는 중입니다. 이 시리얼 통신을 LCD에 쓰려면, char*이 필요합니다.char *에 ints를 추가 한 다음 지우는 중

직렬 포트 (두 개의 정수)에서 여러 문자를 문자열로 읽어야합니다. 양쪽 모두를 받으면 다음 두 글자를 준비하기 위해 문자열을 삭제해야합니다.

TLDR : intchar*에 어떻게 추가하고 2 자 이상이면 문자열을 지울 수 있습니까?

+0

stl 문자열을 사용하면 이런 종류의 작업이 더 간단 해집니다. 필요한 char *를 넘겨주는 c_str() 메서드가 있습니다. sprintf 등을 사용하면 오버 헤드가 적지 만 문제가 될 수 있습니다. – Brian

+0

Arduino는 메모리가 제한되어 있으며 모든 예제에서는 char *를 사용합니다. –

답변

2

char는 단일 문자이지만 char *는 null 문자로 끝나는 문자 배열 인 C 문자열의 첫 번째 문자에 대한 포인터 또는 문자에 대한 포인터가 될 수 있습니다.

char을 사용하여 1 자리보다 긴 정수를 나타낼 수 없으므로 char *을 실제로 사용했다고 가정합니다.

당신은

char buffer[10]; 

는 다음의 int n sprintf와

sprintf(buffer, "%d", n); 

을 가진 그리고 당신이 그것을 완료하면, 당신이 문자열을 지울 수 있습니다 나타내는 문자열로 buffer을 설정할 수있는 경우

sprintf(buffer, ""); 

희망은 그것이 행운을 빌어 요!

+0

작동하는 것처럼 보이지만'buffer = "";를 사용하면 컴파일 오류가 발생합니다 : "const char [1] '을'char [10] '" –

+1

Hm에 할당 할 때 호환되지 않는 유형이 있습니다. 미안해. C가 좀 녹슬 었어. sprintf (버퍼, ""); –

+0

좋습니다, 작동하지만 버퍼가 "49"(1의 ASCII 코드)로 설정되어 나타납니다. 어떤 아이디어? –

0

char *로 읽을 수 없습니다. 포인터입니다. 유효한 포인터를 가리키면 포인터가 가리키는 메모리를 읽을 수 있습니다. 개간과 관련하여, 그것이 의미하는 바가 분명하지 않습니다.

요점은 당신이 원하는 것을 시도하는 실제 코드를 게시해야한다는 것입니다.

+0

나의 사과, 나는 char와 char *의 차이를 깨닫지 못했다. 나는 내 질문을 숯불로 바꿨다. 또한, 지우기에 의해, 나는 숯을 완전히 공백 (값 없음)으로 만드는 것을 의미합니다. –

+0

아니요, char를 의미하지는 않습니다. char은 단일 바이트입니다. 몇 가지 코드를 게시하십시오! –

관련 문제