首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C,数组中的随机元素变成了'?‘打印到终端时的字符

在C语言中,数组中的随机元素变成了'?'打印到终端时的字符是由于该元素的值无法正确地转换为可打印字符。在ASCII码表中,一些值对应的字符是不可打印的,例如控制字符或特殊字符。当数组中的随机元素的值不在可打印字符的范围内时,会显示为'?'。

要解决这个问题,可以通过将数组中的随机元素的值转换为可打印字符来显示。可以使用C语言中的字符转义序列来表示特殊字符,或者使用相应的库函数来进行转换。

以下是一个示例代码,将数组中的随机元素转换为可打印字符并打印到终端:

代码语言:txt
复制
#include <stdio.h>
#include <stdlib.h>

#define ARRAY_SIZE 10

int main() {
    int array[ARRAY_SIZE] = {65, 66, 67, 68, 69, 70, 71, 72, 73, 74}; // 假设数组中的随机元素为ASCII码值

    for (int i = 0; i < ARRAY_SIZE; i++) {
        if (array[i] >= 32 && array[i] <= 126) { // 判断是否为可打印字符的范围
            printf("%c ", array[i]);
        } else {
            printf("? ");
        }
    }

    return 0;
}

在上述示例代码中,假设数组中的随机元素为ASCII码值,通过判断元素的值是否在可打印字符的范围内,来决定是否打印该元素的字符形式。如果不在可打印字符的范围内,则打印'?'。

对于C语言中的字符转义序列,可以参考C语言的规范或相关文档进行了解。对于特殊字符的转换,可以使用库函数如sprintfsnprintf等进行处理。

推荐的腾讯云相关产品和产品介绍链接地址:

请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求进行评估。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言中把数字转换为字符串 【转】

格式化数字字符串 sprintf 最常见应用之一莫过于把整数打印到字符,所以,spritnf 在大多数场合可以替代 itoa。 如: //把整数123 打印成一个字符串保存在s 。...,所以采取了统一4 字节处理方式,导致参数压栈做了符号扩展,扩展成了32 位整数-1,打印4 个位置不够了,就把32 位整数-1 8 位16 进制都打印出来了。...比如许多从第三方库函数返回字符数组,从硬件或者网络传输读进来字符流,它们未必每一段字符序列后面都有个相应’’来结尾。...,而不是静态指定,因为许多时候,程序要到运行时才会清楚到底需要取字符数组 几个字符,这种动态宽度/精度设置功能在sprintf 实现也被考虑到了,sprintf 采用”*”来占用一个本来需要一个指定宽度或精度常数数字位置...下面的是个完整例子,产生10 个[0, 100)之间随机数,并将他们打印到一个字符数组s , 以逗号分隔开。

16.7K72

整理:C++sprintf()函数使用详解

参数 str -- 这是指向一个字符数组指针,该数组存储了 C 字符串。 format -- 这是字符串,包含了要被写入到字符串 str 文本。...格式化数字字符串 sprintf最常见应用之一莫过于把整数打印到字符,所以,spritnf在大多数场合可以替代itoa。如: //把整数123印成一个字符串保存在s。...比如许多从第三方库函数返回字符数组,从硬件或者网络传输读进来字符流,它们未必每一段字符序列后面都有个相应’’来结尾。...下面的是个完整例子,产生10 个[0, 100)之间随机数,并将他们打印到一个字符数组s ,   以逗号分隔开。   ...下面的是个完整例子,产生10 个[0, 100)之间随机数,并将他们打印到一个字符数组s ,   以逗号分隔开。

3K00
  • sprintf()函数用法总结

    因为C语言在进行字符串操作不检查字符空间是否够大,所以可能会出现数组越界而导致程序崩溃问题。 即使碰巧,程序没有出错,也不要这么用,因为早晚会出错。...格式化数字字符串 sprintf 最常见应用之一是把整数打印到字符,所以,spritnf 在大多数场合可以替代itoa。如: 1>把整数123 打印成一个字符串保存在s 。...,所以采取了统一4 字节处理方式,导致参数压栈做了符号扩展,扩展成了32 位整数-1,打印4 个位置不够了,就把32 位整数-1 8 位16 进制都打印出来了。...比如许多从第三方库函数返回字符数组,从硬件或者网络传输读进来字符流,它们未必每一段字符序列后面都有个相应’\0’来结尾。...下面的是个完整例子,产生10 个[0, 100)之间随机数,并将他们打印到一个字符数组s ,以逗号分隔开。

    2.6K31

    C语言中sprintf()函数用法

    sprintf函数打印到字符(要注意字符长度要足够容纳打印内容,否则会出现内存溢出),而printf函数打印输出到屏幕上。...sprintf(str, “%0*x”, 2 * sizeof(void *), &i); 9、sprintf返回值是字符数组字符个数,即字符长度,不用在调用strlen(str)求字符长度...结果如图所示: 12、 格式化数字字符串 sprintf最常见应用之一莫过于把整数打印到字符。如: (1)把整数123印成一个字符串保存在s。...因为 sprintf是个参函数,除了前面两个参数之外,后面的参数都不是类型安全,函数更没有办法仅仅通过一个“%X”就能得知当初函数调用前参数压栈 被压进来到底是个4字节整数还是个2字节短整数...,所以采取了统一4字节处理方式,导致参数压栈做了符号扩展,扩展成了32位整数-1,打印 4个位置不够了,就把32位整数-18位16进制都打印出来了。

    3.7K20

    sprintf用法

    而它精华,显然就在第二个参数: 格式化字符串上。 格式化数字字符串 sprintf 最常见应用之一莫过于把整数打印到字符,所以,spritnf 在大多数场合可以替代 itoa。     ...比如许多从第三方库函数返回字符数组,从硬件或者网络传输读进来字符流,它们未必每一段字符序列后面都有个相应’\0’来结尾。...,而不是静态指定,因为许多时候,程序要到运行时才会清楚到底需要取字符数组几个字符,这种动态宽度/精度设置功能在sprintf 实现也被考虑到了,sprintf 采用”*”来占用一个本来需要一个指定宽度或精度常数数字位置...下面的是个完整例子,产生10 个[0, 100)之间随机数,并将他们打印到一个字符数组s , 以逗号分隔开。...第一个参数长度太短了,没说,给个大点地方吧。当然也可能是后面的参数问 题,建议参对应一定要细心,而打印字符,尽量使用”%.ns”形式指定最大字符数。

    4.4K60

    C语言学习——sprintf函数详细解释及其用法

    格式化数字字符串sprintf 最常见应用之一莫过于把整数打印到字符,所以,sprintf 在大多数场合可以替代itoa。 如: //把整数123 打印成一个字符串保存在s 。   ...,所以采取了统一4 字节处理方式,导致参数压栈做了符号扩展,扩展成了32 位整数-1,打印4 个位置不够了,就把32 位整数-1 8 位16 进制都打印出来了。   ...比如许多从第三方库函数返回字符数组,从硬件或者网络传输读进来字符流,它们未必每一段字符序列后面都有个相应’’来结尾。...,而不是静态指定,因为许多时候,程序要到运行时才会清楚到底需要取字符数组几个字符,这种动态宽度/精度设置功能在sprintf 实现也被考虑到了,sprintf 采用”*”来占用一个本来需要一个指定宽度或精度常数数字位置...下面的是个完整例子,产生10 个[0, 100)之间随机数,并将他们打印到一个字符数组s ,   以逗号分隔开。

    7.2K20

    STM32单片机极简方法 使用宏定义 代替复杂重定向printf()函数,实现串口打印。(HAL库例程)

    对于 printf() 函数我们并不陌生,初学C语言使用第一个函数,其作用是在终端打印显示格式化字符串。...printf("Hello World \r\n");//无参数 由上述代码可以知道,"fomat"表示只读类型字符串,而三个点 “...”...C标准不一样时候可能会有差别,总之编译出错在以上6种之中更换即可。我只用第1、2、5这三种方法。 3.其实在单片机之中如果不重定向 printf() 函数。...,并输出到一个字符数组,返回字符字符个数; printf()------------》把内容转成字符串,并输出到显示终端,返回字符字符个数; 我们可以利用sprintf()特点把要显示内容转换成字符串...,存到一个预先定义好字符数组,然后再用HAL库串口发送函数,把该字符数组信息发出去,发送个数就是sprintf()返回值: uint8_t USART_TX_BUF[200]; //发送缓冲数组

    2.1K20

    通过这14点,让你快速入门C语言(2)

    char arr2[] = { 'a', 'b', 'c', '\0' };//[]是这个数组内有多少个字符,因此此处是4。...C语言中给了数组定义:一组相同类型元素集合 int main() { int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素...int arr1[10] = {1,2,3};//不完全初始化,只初始化前3个,剩余初始化为0 int arr2[10];//这样写也是可以,只是数组值是随机值 int...arr3[] = {1,2,3};//这样写也是可以,[]默认是3 int arr4[];//这样写是错误 int n = 10; int arr[n];//C99标准 变长数组...,允许数组在创建时候,数组大小用变量指定,但是这种数组不能初始化 return 0; } 9.2 数组下标   C语言规定:数组每个元素都有一个下标,下标是从0开始

    11010

    【Linux】 基础IO——文件(下)

    重定向本质 关闭文件描述符0后,发现从0开始可以被输出了 ---- 关闭文件描述符0和2后,发现0和2都可以被使用了 ---- 进程,文件描述符分配规则:在文件描述符表,最小,没有被使用数组元素分配给新文件...me,打开新文件发现本来应该打印到显示器内容,打印到log.txt中了 本来应该打印到显示器上内容,打印到文件里 ,这种现象叫做重定向 ---- 在文件描述符表,最小,没有被使用数组元素分配给新文件...stdout ,struct FILE除了fd,还有一部分缓冲区 当我们想写时候,并不是把数据拷贝到操作系统内部,而是把数据放到缓冲区当中 此时这个fprintf函数会直接返回 C库会结合一定刷新策略...,都会正常打印,因为调用write是系统调用 没有缓冲区,直接调用就写给操作系统了 而使用fprintf ,数据会先写入缓冲区 当要打印到显示器 刷新策略:行缓冲 因为打印内容都存在\n,在调用fork...,打印内容已经在缓冲区中被刷新走了,刷新之后在fork就没有任何意义了 所以fork就什么也没干 当打印到普通文件 刷新策略:全缓冲 使用 hello world 没办法把缓冲区写满,就无法刷新,

    2.1K30

    C】语言文件操作(一)

    本章重点 : 为什么使用文件 什么是文件 文件打开和关闭 文件顺序读写 文件随机读写 文本文件和二进制文件 文件读取结束判定 文件缓冲区 因内容比较多,为方便大家吸收,这一篇只介绍1,2,3,4...在以前各章所处理数据输入输出都是以终端为对象,即从终端键盘输入数据,运行结果显示到显 示器上。...我们可以创建一个FILE*指针变量: FILE* pf;//文件指针变量 定义pf是一个指向FILE类型数据指针变量。可以使pf指向某个文件文件信息区(是一个结构体 量)。...* stream ); 示例: //按照顺序读取文本行 // fgets //读到内容将被放到指针str指向字符数组 //num要复制到str 最大字符数(包括终止空字符),真正读到字符是num...num值为5,而这5个里包含\0,实际读到内容是num-1个字符 当我们将代码5,改为15,监视如下: 此时,我们发现增加了num值,却没有读到下一行内容,而是读取了\n和\0。

    23220

    给你需要NumPy知识

    ndarray.itemsize:数组每个元素字节存储大小。例如元素类型为 float64 数组,其 itemsize 为 8(=64/8)。...函数 zeros 可创建一个内部元素全是 0 数组,函数 ones 可创建一个内部元素全是 1 数组,函数 empty 可创建一个初始元素随机数组,具体随机量取决于内存状态。...,有时间可以尝试解释) 输出数组 当你输出一个数组,NumPy 显示这个数组方式和嵌套列表是相似的。...但将数组印到屏幕需要遵守以下布局: 最后一个轴由左至右打印 倒数第二个轴为从上到下打印 其余轴都是从上到下打印,且每一块之间都通过一个空行分隔 如下所示,一维数组输出为一行、二维为矩阵、三维为矩阵列表...在数组打印,如果一个数组所含元素数太大,NumPy 会自动跳过数组中间部分,只输出两边。

    76520

    ES6新特性

    ) 用于函数参数、数组、对象、对多个变量操作 参数使用时必须放在最后 可以连接数组 当连接合成,名相同,将被最后个替换合并 作用:当不知道有多少个参数,可以使用像数组一样,传入参数 语法格式:...//Object.getOwnPropertySymbols()方法 //返回只包含Symbol类型属性名数组 //Object.getOwnPropertyNames()方法 //返回只包含字符串类型属性名数组...,里面一般装异步函数代码快, //随机数案例 满足条件则继续向下执行,失败则停止或执行失败专有的线路 //只有all里面的所有方法执行成功后,才会继续执行then参数resolve,一当里面一个方法错误...字符串解构赋值 const [a, b, c, d, e] = 'hello'; a // "h" b // "e" c // "l" d // "l" e // "o" 6.3.1 数组解构赋值 以前...数组元素是按次序排列,变量取值由它位置决定;而对象属性没有次序,变量必须与属性同名,才能取到正确值。

    95910

    C语言】变长数组,二分查找和数组之间自动替换实现

    一、C99数组C99标准之前,C语⾔在创建数组时候,数组⼤⼩指定只能使⽤常量、常量表达式,或者如果我们初始化数据的话,可以省略数组⼤⼩。...C99给⼀个数组(variable-length array,简称 VLA)新特性,允许我们可以使⽤变量指定数组⼤⼩。...请看下⾯代码: 1 int n = a+b; 2 int arr[n]; 上⾯⽰例数组 arr 就是数组,因为它⻓度取决于变量 n 值,编译器没法事先确定,只有运⾏才能知道 n 是多少...数组根本特征,就是数组⻓度只有运⾏才能确定,所以数组不能初始化。它好处是程序员不必在开发,随意为数组指定⼀个估计⻓度,程序可以在运⾏数组分配精确⻓度。...一、数组测试 遗憾是在VS2022上,虽然⽀持⼤部分C99语法,没有⽀持C99数组,没法测试;下⾯是我在gcc编译器上测试,(博主用是小熊猫C++编译器,小熊猫实用1是gcc编译器

    9910

    Java Arrays 介绍

    [a, b, c, d] Arrays.toString(arr),不过是简单一个调用,却让你数组输出从一串地址,变成了清晰可辨字符。...如果是多维数组,Arrays.equals 并不会比较子数组元素值,此时需要使用deepEquals 比较。...但是同样对于多维数字,在计算数字不会计算子数组元素,这种情况应该使用 deepHashCode判断。...而 parallelSort()可以并发排序,但是在数据量比较小情况下,Arrays.sort 可能效率更高。 二分查找 二分搜索可以快速找到数组指定元素利器。...并行前缀计算 使用 parallelPrefix 函数并行地累积给定数组每个元素。对于大型数组,并行前缀计算通常比顺序循环更有效。 示例:每一个元素转换成当前以及之前所有元素和。

    10010
    领券