C:snprintf不接受\n GUI显示。需要建议吗

C:snprintf不接受\n GUI显示。需要建议吗,c,linux,printf,C,Linux,Printf,我需要将最后一个有效字符设置为NUL,'\0' 有一个char数组char curstr[128] 我的意图是:curstr[lastCharacter where end]='\0' 下面是如何填充此数组的代码片段: snprintf(num_range, sizeof(num_range), "%d-%d", devIndex, devIndex+127); snprintf(dev_range, sizeof(dev_range), "%s%d...%s%d", devices[devPo

我需要将最后一个有效字符设置为NUL,
'\0'

有一个char数组
char curstr[128]
我的意图是:
curstr[lastCharacter where end]='\0'

下面是如何填充此数组的代码片段:

snprintf(num_range, sizeof(num_range), "%d-%d", devIndex, devIndex+127);
snprintf(dev_range, sizeof(dev_range), "%s%d...%s%d", devices[devPointer].name, 1, devices[devPointer].name, 128);
sprintf(cursStr, "%-7s  %-25.50s  %c%-30.30s  %5Ld%11s\n",
            num_range, dev_range,' ', "Empty", (var64)0, "GPT");
我这样做的原因是,通过在GUI中打印,它在最后显示了一些垃圾字符。但在控制台上打印效果很好。 我甚至尝试对这个数组执行
memset
的0,但没有任何帮助

这就是它被打印到GUI和控制台的方式

             if (cursLine) {
                    TVdisplayText(cursLine, cursStr, &usedLines); // GUI
                    cursLine += usedLines;
             } else {
                    printf("%s\n",cursStr); // console
             }

使用的GUI库是TVision(Turbo Vision)

许多GUI系统无法正确显示换行符等特殊字符。不要在
sprintf
调用中添加换行符,或者手动删除它:

/* Remove the last character from the string */
cursStr[strlen(cursStr) - 1] = '\0';

printf
函数系列(包括
sprintf
)将终止符放在您的末尾。您的代码中可能还有其他错误。也许字符串中的换行符是你的问题?如果我理解正确(也许我没有理解)。。。你最终得到了一个你无法解释的角色,你不是在解决这个问题,而是试图掩盖问题存在的事实?如果我错了,你可以更好地重申你的问题。如果我是对的,那么就希望我是错的。这个字符被称为NUL加上一个L,以避免与指针宏
NULL
混淆。我猜
num\u范围
和/或
dev\u范围
太小了。它们需要足够大,以容纳您正在打印的内容以及终止的
\0
。试着放大它们。@JoachimPileborg:你说得对。sprintf中的
\n
是GUI中显示垃圾字符的原因。也许你可以把它写在答案里,这样我就可以接受了。等等,什么?
cursStr[whatever]-1
是一个有效的左值吗?@Tinctorius它实际上是一个有效的值,但不会执行预期的…:)很多眼睛和浅虫等。谢谢。