我遇到了连接或打印字符串的奇怪问题。我有一个char *,可以设置为字符串文字的几个值之一。
char *myStrLiteral = NULL;
...
if(blah)
myStrLiteral = "foo";
else if(blahblah)
myStrLiteral = "bar";
我从库函数中获得了一些其他字符串,或者是输入的连接 - 它们是malloc或者堆栈变量。当我尝试打印(或使用strcpy()和strcat()连接时,结果是相同的),即使我最后打印字符串文字,它会打印 over 整个字符串的初始字符我正在建造或印刷。
/* otherString1 contains "hello", otherString2 contains "world" */
printf("%s %s %s\n", otherString1, otherString2, myStrLiteral);
/* prints "barlo world" */
我是否误解了C中的字符串文字?
答案 0 :(得分:4)
检查您收到的文字是否只包含您期望的字节:
void PrintBytes(const char *s)
{
while (*s) {printf("%d ", *s); s++;}
}
PrintBytes(otherString1);
PrintBytes(otherString2);
PrintBytes(myStrLiteral);
我怀疑其中一个包含嵌入式控制字符。
如果你不关心找出涉及哪个控制字符,你可以简单地打印每个字符串的长度。如果它比它应该的更长,那里有一个控制角色:
printf("%d\n%s\n", strlen(otherString1), otherString1);
答案 1 :(得分:2)
我唯一能想到的是otherString2包含回车符,但不包含换行符。
找出