繁体   English   中英

字符串不会在C语言中自行打印

String wouldn't print itself in C

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试使用strtok格式化ASCII艺术风格的字符串。 当我尝试通过IDE运行程序时,它实际上是在打印我的十六进制字符串,因此我不必弄乱其中的所有反斜杠。 但是,当我尝试在控制台(Ubuntu)中运行它时,它没有任何回报。

#include <sys/ioctl.h>
#include <stdio.h>
#include <string.h>

char pacmanText[] = { 0x20, 0x5f, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 
                      0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
                      0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
                      0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0d, 
                      0x0a, 0x7c, 0x20, 0x20, 0x5f, 0x20, 0x5c, 0x20, 0x5f, 0x5f, 
                      0x20, 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x5f, 0x20, 
                      0x5f, 0x5f, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x5f, 
                      0x5f, 0x20, 0x5f, 0x20, 0x5f, 0x20, 0x5f, 0x5f, 0x20, 0x20, 
                      0x0d, 0x0a, 0x7c, 0x20, 0x7c, 0x5f, 0x29, 0x20, 0x2f, 0x20, 
                      0x5f, 0x60, 0x20, 0x7c, 0x2f, 0x20, 0x5f, 0x5f, 0x7c, 0x20, 
                      0x27, 0x5f, 0x20, 0x60, 0x20, 0x5f, 0x20, 0x5c, 0x20, 0x2f, 
                      0x20, 0x5f, 0x60, 0x20, 0x7c, 0x20, 0x27, 0x5f, 0x20, 0x5c, 
                      0x20, 0x0d, 0x0a, 0x7c, 0x20, 0x20, 0x5f, 0x5f, 0x2f, 0x20, 
                      0x28, 0x5f, 0x7c, 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x5f, 0x7c, 
                      0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 
                      0x20, 0x28, 0x5f, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 
                      0x20, 0x7c, 0x0d, 0x0a, 0x7c, 0x5f, 0x7c, 0x20, 0x20, 0x20, 
                      0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, 0x5f, 
                      0x7c, 0x5f, 0x7c, 0x20, 0x7c, 0x5f, 0x7c, 0x20, 0x7c, 0x5f, 
                      0x7c, 0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x20, 
                      0x7c, 0x5f, 0x7c, 0x0d, 0x0a
}; 

int main() 
{ 
    struct winsize w; 
    ioctl(0, TIOCGWINSZ, &w); 

    char *pch = NULL; 

    pch = strtok(pacmanText, "\n"); 
    while (pch != NULL) 
    { 
        printf("%s", pch); 
        fflush(stdout); 

        pch = strtok(NULL, "\n"); 

    } 
    return 0; 
}

那么谁能告诉我为什么它不能打印该字符串?

2 个回复

您的字符串中没有'\\0'终止符,只需在数组的结尾0x00处再添加一个元素,您的strtok()就会正确地分割行,问题是您错过了结尾的'\\n'字符线,所以只需更改此

printf("%s", pch);

printf("%s\n", pch);

但是,这样做是没有意义的。 您可以只使用printf("%s", pacmanText);

所以基本的问题是strtok()它将分隔符替换为'\\0'所以当您这样做时

printf("%s", pch);

您没有打印定界符。

问题:

  1. 出于iharob讨论的原因,您需要在pacmanText的末尾使用一个空终止符。
  2. strtok()将修改字符串,以便用'\\0'替换分隔符。 因此,您永远不会在整个程序中打印换行符。

让我们修复以下错误:

#include <stdio.h>
#include <string.h>

char pacmanText[] = {
    0x20, 0x5f, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 
    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0d, 
    0x0a, 0x7c, 0x20, 0x20, 0x5f, 0x20, 0x5c, 0x20, 0x5f, 0x5f, 
    0x20, 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x5f, 0x20, 
    0x5f, 0x5f, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x5f, 
    0x5f, 0x20, 0x5f, 0x20, 0x5f, 0x20, 0x5f, 0x5f, 0x20, 0x20, 
    0x0d, 0x0a, 0x7c, 0x20, 0x7c, 0x5f, 0x29, 0x20, 0x2f, 0x20, 
    0x5f, 0x60, 0x20, 0x7c, 0x2f, 0x20, 0x5f, 0x5f, 0x7c, 0x20, 
    0x27, 0x5f, 0x20, 0x60, 0x20, 0x5f, 0x20, 0x5c, 0x20, 0x2f, 
    0x20, 0x5f, 0x60, 0x20, 0x7c, 0x20, 0x27, 0x5f, 0x20, 0x5c, 
    0x20, 0x0d, 0x0a, 0x7c, 0x20, 0x20, 0x5f, 0x5f, 0x2f, 0x20, 
    0x28, 0x5f, 0x7c, 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x5f, 0x7c, 
    0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 
    0x20, 0x28, 0x5f, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 
    0x20, 0x7c, 0x0d, 0x0a, 0x7c, 0x5f, 0x7c, 0x20, 0x20, 0x20, 
    0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, 0x5f, 
    0x7c, 0x5f, 0x7c, 0x20, 0x7c, 0x5f, 0x7c, 0x20, 0x7c, 0x5f, 
    0x7c, 0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x20, 
    0x7c, 0x5f, 0x7c, 0x0d, 0x0a, 0x00
}; 

int main() { 
    char *pch = strtok(pacmanText, "\n"); 
    while (pch != NULL) { 
        printf("%s\n", pch); 
        pch = strtok(NULL, "\n"); 
    } 
}

哪个输出:

[1:08pm][wlynch@watermelon /tmp] ./foo
 ____                                  
|  _ \ __ _  ___ _ __ ___   __ _ _ __  
| |_) / _` |/ __| '_ ` _ \ / _` | '_ \ 
|  __/ (_| | (__| | | | | | (_| | | | |
|_|   \__,_|\___|_| |_| |_|\__,_|_| |_|
2 C语言中的字符串-打印与strcmp相同,即它们不是

嗨,大家好,我的服务器客户端项目有问题。 我使用./server www.google.com命令运行代理服务器,所以我有argv[1]=www.google.com 。 之后,我运行客户端,并将值GET www.google.com发送到服务器。 现在,从服务器端,我使用strtok_r ...

4 printf()不会在c中打印字符串

我正在尝试在for循环之后打印一个char数组,以查看输出以确保它是正确的。 但是,它不会打印字符串。 为什么不打印字符串? 我想念什么吗? 它打印索引println字符串,但不会打印Tag位。 我想念什么? 这是我的代码 我尝试使用Google搜索问题,并尝试了一些方法 ...

2016-04-28 07:33:32 4 2567   c
7 C语言中的字符串基础

这个问题已经在这里有了答案: 如何正确比较字符串? 9个答案 怎么了 blah=="abcdef"不会返回真实值 ...

2015-12-29 12:47:19 5 48   c/ arrays
8 关于C语言中的字符串输入

我是编程的新手,并且编写了以下代码: 当我输入x的“ I”,y的“ am”和z的“ happy”时,结果如下: 有人知道是什么问题吗? 谢谢! ...

2014-10-08 05:33:45 3 54   c/ string
10 C语言中的字符串问题

我是C世界的新手,我有两个可能是愚蠢的问题。 我正在读C中的结构,这是我卡住的地方。 假设我们有这样的结构 在这种情况下如何将文本传递给Ford.model? 我的第二个问题也是字符串。 这段代码工作正常 但是这个没有 任何人都可以解释为什么它不起作用? ...

2011-09-27 10:18:17 5 3259   c/ string
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM