C语言中sprintf赋值问题

在调试一段古老代码时发现的问题,本人C语言一窍不通,请教大神
sprintf((char *)TekiLim.arr, "%9.9s", TekiyoLim );
这段代码中TekiyoLim为201201102
为什么赋值以后,TekiLim.arr的值为201
声明如下:
struct { unsigned short len; unsigned char arr[10]; } TekiLim;

1

10个回答

 sprintf((char *)TekiLim.arr, "%s", TekiyoLim );
1
HAOHAIZI678
HAOHAIZI678 %9.9s有这种格式吗,又不是浮点数,改成%9s
大约一年之前 回复
qq_42111722
qq_42111722 sprintf((char *)TekiLim.arr, "%s", TekiyoLim );
大约一年之前 回复
weixin_42695878
weixin_42695878 可能内存破坏,看一下TekiLim.arr内存,201后面都是什么值
大约一年之前 回复
 #include <stdio.h>

struct { unsigned short len; unsigned char arr[10]; } TekiLim;

int main(void) { 
    char * TekiyoLim = "201201102";
    sprintf((char *)TekiLim.arr, "%9.9s", TekiyoLim);
    printf("%s", TekiLim.arr);
    return 0;
}
3

结果:
201201102

1

int sprintf( char *buffer, const char *format, [ argument] … );
这个函数包含三个部分的参数:
buffer:char型指针,指向将要写入的字符串的缓冲区。format:格式化字符串。即可选参数的想要输入的数据类型。[argument]...:可选参数,可以是任何类型的数据。

函数用法

1

改成"%9s"试一下

0

TekiyoLim 是什么类型

0

%9.9s有这种格式吗,又不是浮点数,改成%9s

0

根据如上内容所示 应该是 内容破坏

0

直接是"%s"就可以吧

0

能不能把代码贴全 可能是其他语句改变了其中的内容
按你仅有的几句代码执行下来输出是对的,%9.9s就是取9位,不足9位的用空格补,右对齐

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c语言中的sprintf函数的使用
sprintf函数的功能与printf函数的功能基本一样,只是它把结果输出到指定的字符串中了:#include&amp;lt;stdio.h&amp;gt; int main(int argc, char *avgv[]) { char s[40]; sprintf(s,&quot;%s%d%c&quot;,&quot;test&quot;,1,'2'); /*第一个参数就是指向要写入的那个字符串的指针,剩下的就和printf(...
C语言sprintf使用出现段错误
#include #include void Block(int function_no,int instrument_no) { char *function; char *instrument; char *result; sprintf(function,"%d",function_no); sprintf(instrument,"%d",instrument_no);
C语言 sprintf()函数 与 printf()函数
头文件:#include sprintf()函数用于将格式化的数据写入字符串,其原型为: int sprintf(char *str, char * format [, argument, ...]); 【参数】str为要写入的字符串;format为格式化字符串,与printf()函数相同;argument为变量。 sprintf()最常见的应用之一莫过于把整数打印到
C语言中的输出格式和sprintf详解
sprintf( tagStrStyle, "%%.%dd", TAG_LENGTH );(把字符串TAG_LENGTH按照%%.%dd格式赋值给tagStrStyle,其中TAG_LENGTH=4) 1.若要想输出%,则在输出时,为%% 2.%%.%dd的输出格式分解:前两个%%,是为了输出%,后面的%d,是为了让数字按照整型输出,所以按照该格式输出为%.%dd 3.其中的“.”与“-”相
C语言中的二维数组问题
在《C和指针》Page157中讲到多维数组(例matrix[3][10])时,*(matrix+1)+5是一个指向matrix[1][6]的指针,等同于matrix[1]+5.而*(*(matrix+1)+5)就是matrix[1][6]. 在这里matrix表示一个指向若干整型元素数组的指针.      而《C陷阱与缺陷》的第三章-语义"陷阱",讲到指针与数组的关系时,作者提到"C语言只有一维
c语言中赋值截断
c语言中的“截断”现象
C语言中通过sprintf()函数构造sql语句
char* insertJob; char sql[255]; insertJob = &amp;amp;amp;quot;INSERT INTO job_table (task_id,point_tag,task_serial,device_tag) VALUES (&amp;amp;amp;quot;; sprintf(sql,&amp;amp;amp;quot;%s%d%s%d%s%d%s%d%s&amp;amp;amp;quot;, i
C的函数,变量声明,malloc,MessageBox,sprintf,简单应用
函数,变量声明,MessageBox与MessageBoxA,MessageBoxW,malloc与new,sprintf;操作窗体,dll控制程序,windows,linux换命令行的颜色
C语言文件的学习open()-sprintf()-新建一个文件并且写入数据
/*程序思路:1.首先定义一个文件指针,一个FileName字符数组(用于接收用户输入的文件名),一个tmp字符数组(用于存放数据),一个字符变量InputChar(用于接收用户的数据输入)2.输入文件名FileName,sprintf函数将数据写入磁盘,并且写入tmp3.验证文件是否打开正确,若正确继续,否则退出4.输入数据,并且保存在字符数组中5.输出用...
C语言,字符串的拼接.strcat()和sprintf()函数之间的比较
#include #include #include int main(void) { char *ch1 = "hello"; char *ch2 = "world"; char *temp = (char *)malloc(strlen(ch1) + strlen(ch2)); strcat(temp,ch1); strcat(temp,ch2); printf("Tes
C语言中的进制转换 itoa & sprintf
在C语言中经常会遇到将二进制、八进制、十进制、十六进制等之间的相互转换,比如:在将八进制以二进制的形式打印出来等。可以用C语言(stdlib.h)中的itoa函数来做这件事情。 char *itoa( int value, char *string,int radix); 原型说明: value:欲转换的数据。 string:目标字符串的地址。 radix:转换后的进制数
c语言的输出格式之正负号
#include&amp;lt;stdio.h&amp;gt; #include&amp;lt;math.h&amp;gt; int main() { int a; scanf(&quot;%d&quot;,&amp;amp;a); printf(&quot;%+d&quot;,a); ///这可以把+号输出出来 return 0; }  
c语言中整数赋值和字符赋值的一些问题
int i=289 char c='a'; c=i;这个问题,因为char是一个8位的存贮结构,你把一个16位的int的结构赋值给了它,结果只能是把高位的丢掉,所以i被减了256以后赋值给了c,即低位部分赋值给了c你在c='a'时,c存的是97但你后来把i也就是289给了c,所以值溢出了,(为什么这里i被剪掉的是256呢,这个256是怎么算出来的?) 补充:289是10进制 转换到8进制是000
C语言中不同类型数据之间的赋值
整数与整数之间 一、长度相等(在内存中存储的位数相等)的两个不同的类型的数据之间的赋值 在计算机中的存储内容不变,只是数据按照不同的编码格式来解析。二、长 赋值给 短 (短 = 长) 截取低位,然后按照短整数的数据类型解析。三、短 赋值给 长 (长 = 短) 其中,短转长又分为三种情况: 1. 两个数据都是无符号的数据,短整数直接高位补0。 2. 两个数据都是有符号的数据,短整数进行符号
关于c语言中的运算符及注意事项
( ),小括号,用来提升优先级 [ ],用于数组下标 /,除法,注意:int类型中整除取整(去尾) 自增自减运算符 前置++:先自增一 前置--:先自减一 后置++:后加一 后置--:后减一 位运算符(针对二进制) 10:0000 1010 13:0000 1101 ①~ 按位取反  :对二进制的每一位取反 ~10:1111 0101 ~13:1111 0
C语言中给数组赋值
C语言中给数组赋值也就是直接赋值法;举例如下:int a [ ]; a = new int[3]; a [0] = 1; a [1] = 2; a [2] = 3;哈,这就是给数组赋值,很无奈的是我才会。
贺利坚的课程教学链接
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 汇编语言程序设计汇编语
C语言库函数C语言库函数
C语言中的库函数C语言中的库函数C语言中的库函数C语言中的库函数C语言中的库函数
关于sprintf函数拼接失败问题
今天在工作中遇到一个关于sprintf的问题,代码如下:char content_line[2048];memset(content_line, 0, sizeof(content_line));sprintf(content_line, &quot;%-*.*s%-*.*s%-*.*s%-*.*s%s%-*.*s%-*.*s%-*.*s&quot;,                                 ...
C语言中对于for语句,变量赋初值问题探讨
在C语言编程中很多时候会用到for语句循环,这就需要对for循环里面所涉及的变量赋值,有时赋值赋不对则会造成结果的错误。   下面就我在编程中所涉及的问题进行详解。   例如:打印所有不超过256的,其平方具有对称性质的数即回文数。 程序如下: #include int main() {     int a[5], n, i, c, j ;     for ( i =1;
C语言中全局变量的定义及重复包含问题
C语言中全局变量的定义及重复包含问题          C语言中一般将全局变量intA的定义和初始化放在fileName .c或者其它 xx.c文件中,同时在与之对应的fileName.h文件中进行 extern int A声明。当一个全局变量int A仅在fileName.c文件中定义而未在相对应的头文件fileName.h声明时,包含与之相应的fileName.h文件时编译器会出现未定义的错
c语言变量赋值,初始化
数组变量为全局变量,或被部分初始化,均会出现这种情况。 C语言中,变量在没有显式初始化时,区分变量类型,有如下几种情况: 1 全局变量, 和静态局部变量,未初始化时值默认为0.无论是数组还是变量,都是如此。 2 局部变量,初始值为随机值。 3 数组类局部变量,当被部分初始化时,未被初始化部分,值默认为0。 1.在C语言中,“初始化”和“赋值”是两个不同的概念。楼主问题中应该是“初始化”而非“赋
C语言(六) C 位运算符 和 赋值运算符
一.  位运算符 1.  &amp;amp;  按位与操作,按二进制位进行&quot;与&quot;运算。运算规则: 0&amp;amp;0=0; 0&amp;amp;1=0; 1&amp;amp;0=0; 1&amp;amp;1=1; 2.  |  按位或运算符,按二进制位进行&quot;或&quot;运算。运算规则: 0|0=0; 0|1=1; 1|0=1; 1|1=1; 3.  ^  异或运算符,按二进制位进行&quot;...
sprintf() 函数把格式化的字符串写入变量中。
%s - 字符串 %d - 包含正负号的十进制数(负数、0、正数)       $dao_loan = new Dao_V02_LoanModel();       $f_sql  = sprintf('SELECT COUNT(id) AS total FROM %s ', $dao_loan->getTableName());         $f_sql .= spr
C语言中的strcat()函数
头文件: #include 函数原型: char *strcat (char *dest,const char *src)函数描述: strcat()会将参数src字符串拷贝到参数dest所指的字符串尾,第一个参数dest要有足够的空间来容纳要拷贝的字符串; 返回值: 返回dest字符串参数的起始地址; 例子: #include #include int main(vo
R语言中c()函数与paste()函数的区别
c()函数: 将括号中的元素结合为向量 paste()函数: 连接括号中的元素 例如, c(1, 2:4),结果为1 2 3 4 paste(1, 2:4),结果为“1 2” “1 3” “1 4” c(2, &amp;quot;and&amp;quot;),结果为“2” “and” paste(2, &amp;quot;and&amp;quot;),结果为“2 and” ...
c语言:赋值运算符与赋值表达式
任务代码: #include int main () { int a printf("%d",(a=5)); return 0; } 执行情况: 知识总结: 运算符的优先级: 优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的
C语言的printf函数的执行顺序
C语言的printf函数是先从右往左计算各表达式的值(入栈),再从左往右输出各表达式的值(出栈)。 #include int main() { int i = 1; printf("%d %d %d\n", i++, i++, i++); printf("%d\n", i); return 0; } /** * 输出结果: * 3 2 1 * 4
c中连续赋值问题
c中不可以再定义变量时对变量进行连续赋值,例如 int x=y=2;“=” 运算符是从右至左结合,把2赋值给y,但此时y还没有定义,违反了c中先定义后使用原则。 正确写法 int x,y; x=y=2;...
C语言位域的使用方法
C语言位域的使用方法最近看到国外的众筹网站有体感服参与,了解了一些,用到了30个九轴传感器(陀螺仪、加速度计、地磁计),心想自己也来做一个,所以首先选择了BMX055这款(考虑到价格相对便宜,之前用过MPU9150,价格相对来说稍微较贵),于是网上买了几片模块并且附带了例程。只是这个例程到处都是坑,其中最多的就是数据格式转化的问题。我们单片机中的寄存器是按照二进制补码来存的,因为一个加法器即可解决加
C语言中指针的灵活运用
C语言中指针的灵活运用C语言中指针的灵活运用C语言中指针的灵活运用C语言中指针的灵活运用C语言中指针的灵活运用
%03d、%3d、%-3d规则
%3d--可以指定宽度,不足的左边补空格 %-3d--左对齐 %03d---一种左边补0 的等宽格式,比如数字12,%03d出来就是: 012
C语言中bit和sbit的区别
详细描述了C51中bit和sbit的区别。
C语言 赋值表达式
由赋值运算符或复合赋值运算符,将一个变量和一个表达式连接起来的表达式,称为赋值表达式。 (1)一般格式 变量 (复合)赋值运算符 表达式 (2)赋值表达式的值 任何一个表达式都有一个值,赋值表达式也不例外。被赋值变量的值,就是赋值表达式的值。 例如,&amp;quot;a = 5&amp;quot;这个赋值表达式,变量a的值&amp;quot;5&amp;quot;就是它的值。 ...
C语言中字符数组的初始化与赋值
C语言中字符串的初始化赋值及其他操作
C语言中二级指针的赋值
测试环境:win10+cygwin ---------------------------------   在c语言中,经常会对二级指针变量(即指针的指针)进行赋值操作。如果要对一个二级指针进行赋值,不能采用 p = &amp;amp;(&amp;amp;i) 这种语句,即不能对一个变量进行两次取地址操作。因为 &amp;amp;i 的值是一个右值,而&amp;amp;的操作数必须是左值,所以&amp;amp;(&amp;amp;i)会产...
C语言中.h和.c文件解析 教程
C语言中.h和.c文件解析 C语言中.h和.c文件解析 C语言中.h和.c文件解析 C语言中.h和.c文件解析
【C语言】sprintf 和 snprintf 真的没有区别吗?
C语言上总有些非常相近的接口函数,比如sprintf和snprintf就是其中的一对。以笔者多年的工作经验,这对接口函数在平时的编程中,使用的频度是非常高,只是你真的了解它们俩的区别吗? 带着这个问题,请跟随笔者的思路梳理一遍sprintf和snprintf。通过阅读本文,你将了解到以下内容: sprintf和snpintf分别是什么? sprintf和snprintf的区别与联系 spr...
好东西C语言中的指针常量
C语言中的指针常量C语言中的指针常量C语言中的指针常量
C语言中字符型变量与整型变量的联系
1)字符型变量可以与整型变量一样进行算术运算(使用字符数据的ASCII码值进行运算的) 例1: char  m = ‘A’; char  n = 32;     //char类型直接赋值整型,此整型为对应字符的ASCII码值 char result = m+n; printf(“%c”,result);     //输出为a 例2: char  m = ‘A’; m = m +(‘a’...