나는 당신이, 당신이 이런 식으로 (acter)는 char에 대한 포인터를 초기화 할 수있는 용어를 혼동 생각 :
char *literal = "asdf\r\n"
개정 : 그러나, C 문자열 예를 들어 이스케이프 따옴표를 사용할 수 있습니다 :
<backspace>asdf<escape-character><carriage-return><linefeed><vertical-tab><tab>
을
char *literal = "\basdf\x1b\r\n\v\t";
을 인쇄 할 것이다
이러한 문자는 콘솔 기능에 따라 표시되지 않으며 이스케이프에 대한 화살표와 탭 간격이 표시 될 수 있습니다 ... 간단한 논리를 사용하여이 문제를 해결할 수 있습니다. \
마다 다른 \
포인터가 실제 \n
및 \r
그래서 수도를 잡고되면서
void ToLiteral(const char *pStr){
char *p = (char*)pStr;
while (*p){
/* if (*p == '\\') putchar('\\'); */
/* PERFORM THE LOOK UP */
putchar(*p++);
}
}
그러나 그것을보고, 그것은 바로 생각하지 않았다 : 그것은 충분해야 다음 코드와 같은
asdf\\r\\n
뭔가를 표시하도록 화장실을 더 쉽게 사용할 수있다. 조회 테이블이에 대한 내장 함수가 없습니다이
struct LookUp{
int codeLiteral;
char *equivCodeLiteral;
};
struct LookUp look[] = { { 0xa, "\\r"}, { 0xd, "\\n" }, { 0x9, "\\t" } };
"문자열 리터럴"은 여기에서 사용할 올바른 문구가 아닙니다. 원하는 것은 C 이스케이프 시퀀스를 갖는 문자가 해당 시퀀스로 대체되도록 문자열을 변환하는 함수입니다. –
'literal == "asdf \ r \ n"'절대로 사실이 아닙니다. 나는 당신이'strcmp (literal, "asdf \\ r \\ n") == 0'을 의미한다고 생각합니다. – jamesdlin
No. Literal == "asdf \\ r \\ n"왜냐하면 to_literal은 "asdf \ r \ n"을 "asdf \\ r \\ n"으로 변환해야하기 때문입니다. 그러나 대답을 통해 나는 더 나은 함수 이름 (C에서)이 ** char * escape (char *) **라는 것을 알게되었습니다. –