热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将整数值存储为C中的字符串。-StoreintegervaluesasastringinC

Followingcodeprintintegervalues:以下代码打印整数值:for(i0;i<COL;i++){fprin

Following code print integer values:

以下代码打印整数值:

for ( i=0 ; i

I want to store these integer values as a string in a character pointer. To do so, I tried following code but it does not work.

我希望将这些整数值存储为字符指针中的字符串。为此,我尝试了以下代码,但它不起作用。

    char *hexVal="";
    char *temp;
    int val;

    for ( i=0 ; i

Thanx.......

谢谢.......

3 个解决方案

#1


1  

When you write

当你写

char* hexVal = "";

you are setting hexVal to point to a string literal, later in your code you try to strcat to that address which will cause undefined behavior.

您正在设置hexVal以指向一个字符串字面量,稍后在您的代码中,您尝试将其strcat转换到将导致未定义行为的地址。

What you need to do is to allocate a large enough area to hold your resulting string and then let hexVal point to that.

你需要做的是分配一个足够大的区域来容纳你的结果字符串,然后让hexVal指向那个。

E.g.

如。

char* hexVal = malloc(100); // or how much bytes you need

then just do

然后就做

strcat(hexVal, temp);

alt. allocate on stack

alt.分配在堆栈

char hexVal[100];

#2


1  

You are approaching this wrong. In general, if you have an int i then you can't just typecast a char *cp to the address (or the value) of i and expect it to magically become a string that you can printf or use in strcat. For one thing, strings are null-terminated and don't have a fixed length, while ints have a fixed size of typically 32 bits long.

你正接近这个错误。一般来说,如果您有一个int i,那么您不能仅仅将char *cp类型转换为i的地址(或值),并期望它会神奇地成为您可以在strcat中打印或使用的字符串。首先,字符串以null结尾,并且没有固定长度,而ints的长度通常为32位。

You have to create a separate buffer (memory space) where snprintf will happily create a string-representation of your int value for you.

您必须创建一个单独的缓冲区(内存空间),snprintf将愉快地为您创建int值的字符串表示。

I think that your question is more about understanding how programming, pointers and C work in general, than about ints and strings and their conversion.

我认为你的问题更多的是关于如何理解编程,指针和C的一般工作,而不是关于int和字符串以及它们的转换。

#3


1  

You are getting undefined behavior since there is no writable memory at hexVal, which just points at a read-only area containing a character with the value 0. It is a valid string, but it's constant and has length 0, you cannot append to it.

您正在获得未定义的行为,因为在hexVal中没有可写的内存,它只指向包含具有值0的字符的只读区域。它是一个有效的字符串,但是它是常量,长度为0,你不能附加到它。

Also, of course you can't cast an integer into a "string", that's just not how C works. This:

当然,你也不能把整数转换成字符串,这不是C的工作方式。这样的:

temp=(char*) val;

simply re-interprets the value of val as a pointer (i.e. as an address), it doesn't magically compute the proper sequence of digit characters used to represent the address, i.e. it doesn't convert val to a string.

简单地将val的值重新解释为一个指针(即一个地址),它不会神奇地计算出用于表示地址的数字字符的正确序列,也就是说它不会将val转换为字符串。

You can use snprintf() to convert an integer to a string.

可以使用snprintf()将整数转换为字符串。

So, to summarize:

所以,总结一下:

  • Change hexval's declaration into e.g. char hexval[32] = "";, this declares it as an array of 32 characters, giving you plenty of space into which to build a number as a string. It also initializes the array so the first character is 0, thus making it into an empty string (with space to grow).
  • 将hexval的声明改为:char hexval[32] = ";,这声明它是一个32个字符的数组,给了您足够的空间来构建一个数字作为字符串。它还初始化数组,因此第一个字符是0,从而使它变成一个空字符串(有空间增长)。
  • Use e.g. snprintf(tmp, sizeof tmp, "%d", 4711); to format a number into a string (which should be e.g. char tmp[16];) in decimal form.
  • 使用snprintf(tmp, sizeof tmp,“%d”,4711);将一个数字格式化成一个字符串(应该是char tmp[16];)以十进制形式。
  • Use strcat(hexval, tmp); to concatenate the newly built numeric string onto hexval.
  • 使用strcat(hexval、tmp);将新建的数字字符串连接到hexval。
  • BEWARE that you can't concatenate forever, you will run out of space if you do it too long. Adjust the sizes, in that case.
  • 要注意的是,如果你做的时间太长,你的空间就会耗尽。调整大小,在这种情况下。
  • Check return values where possible, read the manual pages (Google man FUNCTION where FUNCTION is a standard C library function like strcat).
  • 在可能的情况下检查返回值,阅读手册页(函数是标准的C库函数,如strcat)。

推荐阅读
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
author-avatar
卡夫卡咯
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有