【问题标题】:c program prints question mark in a box as an outputc程序在框中打印问号作为输出
【发布时间】:2021-09-20 14:35:55
【问题描述】:

有一个char指针变量,它的值来自一个函数。

char* apple = ....(function call)

我想打印如下:

int len = strlen(apple);
for(i=0;i<len;i++){
    printf("%c ", apple[i]);
}

但在控制台中,它会在一个框中给出一个问号作为输出。我该怎么办,我应该如何打印?谢谢。

【问题讨论】:

  • 欢迎您!请说明您如何初始化cigar 以及它指向的任何内容,以及len 的来源。最好发布Minimal Reproducible Example,最短的完整 代码,显示您尝试过的内容。最好的方法是复制/粘贴,在您检查它确实表现出所描述的行为之后。
  • 仍然没有足够的信息,但我猜测:请参阅Function returning address of local variable error in C。当函数返回时,局部变量不复存在,所以现在指向的是不确定的。
  • 欢迎使用sof,当你展示调用函数或一些简单的例子时,你可能会得到更多的答案
  • @İlknur Baş - 为什么您认为 方框中的问号 不正确?
  • 仅供参考,大多数系统为没有图形表示的字符打印问号,例如 ASCII 值低于 32 或高于 127,或不受支持的 Unicode 字符.如果函数返回指向缓冲区的指针而不包含非 ASCII(即二进制)数据,则可能是这种情况。

标签: c pointers char output


【解决方案1】:

我在打印部分没有看到问题,通过重新调整指向 char 数组的指针的功能需要进行调查。

// In this example, getString function returns string literal
// That is being iterated in the next for loop over its length and prints its characters
#include <stdio.h>
#include <stdlib.h>

char *getString(void); // declare
int main() {
    char *apple = getString();
    int len = strlen(apple);
    for(int i = 0; i < len ; i++) {
       printf("%c ", apple[i]);
    }
    return 0;
}

char *getString() {
    return "somesthing";
}

以下示例将仅打印可打印的 ascii 字符。从 0 到 31 ,0 代表空值,1 代表 SOH,依此类推。如果您期望打印奇怪的输出,您将无法打印控制代码(ASCII 代码

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

#define PRINTABLE_ASCII_CHAR_COUNT 96

/*
Printable chars list
"! " # $ % & ' ( ) * + , - . /
0 1 2 3 4 5 6 7 8 9 : ; < = > ?
@ A B C D E F G H I J K L M N O
P Q R S T U V W X Y Z [ \ ] ^ _
` a b c d e f g h i j k l m n o
p q r s t u v w x y z { | } ~"
*/

char *getASCIIs(void);
int main() {
    char *apple = getASCIIs();
    int len = strlen(apple);
    for(int i = 0; i < len ; i++) {
       // p << i << ((i % 16 == 15) ? '\n' : ' ');
       printf("%c ", apple[i]);
    }
    return 0;
}

char *getASCIIs() {
  static char buffer[PRINTABLE_ASCII_CHAR_COUNT];
  for (int i = 32, j=0 ; i <= PRINTABLE_ASCII_CHAR_COUNT; i++, j++) {
    buffer[j] = i;
  }
  return buffer;
}



enter code here

【讨论】:

    【解决方案2】:

    您的语法似乎合法。我高度怀疑cigar[i] 捐赠了您正在寻找的正确角色。尝试通过使用(char) cigar[i]cigar[i] 转换为字符来确认这一点。您可以将cigar[i] 输出为字符串%s,作为调试的一部分,它真正指向的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多