2014-06-08 4 views
0

Arduino에서이 함수를 사용하여 40 자 (LCD의 너비)까지 문자열을 채 웁니다.이 문자열을 쓰는 과정에서 마지막으로 남은 문자가 지워집니다. 내가 그것을 사용할 때sprintf를 사용하는 데 문제가 있습니까?

문제는, 그것은 보낼 수있는에서 내 RF24 모듈을 중지 ... (다른 모든 여전히 실행하고 접수에) 내가 아는 이상한 ...

void printLine(char* line){ 

     sprintf(line, "%-40s", line); 
     lcd.writeString(line); 

    } 

은 지적했다 라인에서 줄을 써서는 안된다. 나는 이것을 고쳤지만 같은 문제가있다. (코드의 상단에서) '라인'

char line[lcdCols]; 
+0

[sprintf (버퍼, "% s \ [... \]", 버퍼, \ [... \])가 안전합니까?] (http://stackoverflow.com/questions/1283354/is-sprintfbuffer- s-buffer-safe) – alk

+0

새 코드를 사용하면 정보가 충분하지 않을 수 있습니다. 'blank'는 어디에 정의되어 있습니까? 'lcd.writeString()'이란 무엇입니까? –

+0

빈칸에 대해 유감스럽게 생각합니다. 2 명의 사용자를 대상으로 한 시험에서 나왔습니다. 초기 답변 후 원래 코드로 수정했습니다. lcd.writeString의 출처는 다음과 같습니다. https://code.google.com/p/arduino-t6963c/source/browse/T6963_Lib/T6963.h –

답변

1

당신은 동일한 문자 버퍼에 쓰기를 시도하고 당신 '의 선언을

void emptyLine(){ 

    sprintf(line, "%-40s", ""); 
    lcd.writeString(line); 

} 

그리고 여기에 있습니다 :이 기능은 또한 동일한 문제가 에서 다시 읽습니다. C99 표준과

:

sprintf [... 복사가 중첩 개체간에 일어나는 경우, 동작이 정의되지 않는다.

실제로 이것은 무한 루프를 유발할 수 있습니다.

+0

아니, 그렇지 않아, 나는 새로운 버퍼와 같은 문제를 시도했다. 편집 질문. –

관련 문제