❶ c语言中关于占位的问题
整形变量占位符就是用%d
%lf是double的占位符
float类型变量也可以用占位符%f,如果用%d,那打印出来的就是整形的
%i最好不用
字符 输入数据;变元类型
d 十进制整数;int *
i 整数;int *。该整数可以是以0开头的八进制数,也可以是以0x/0X开头的十六进制数
o 八进制数(可以带或不带前导0);unsigned int *
u 无符号十进制整数;unsigned int *
x 十六进制整数(可以带或不带前导0x/0X);unsigned int *
c 字符;char *。按照字段宽的大小把读入的字符保存在指定的数组中,不加入字符'\0'。字段宽的缺省值为1。在这种情况下,不跳过空白符;如果要读入下一个非空白符,使用%1s(数字1)
s 有非空白符组成的字符串(不包含引号);char *。该变元指针指向一个字符数组,该字符数组有足够空间来保存该字符串以及在末尾添加的'\0'
e/f/g 浮点数;float *。float浮点数的输入格式为:一个任选的正负号,一串可能包含小数点的数字和一个任选的指数字段。指数字段由字母e/E以及后跟的一个可能带正负号的整数组成
p 用printf("%p")调用输出的指针值;void *
n 将到目前为止此调用所读的字符数写入变元;int *。不读入输入字符。不增加转换项目计数
[...] 用方括号括起来的字符集中的字符来匹配输入,以找到最长的非空字符串;char *。在末尾添加'\0'。格式[]...]表示字符集中包含字符]
[^...] 用不在方括号里的字符集中的字符来匹配输入,以找到最长的非空字符串;char *。在末尾添加'\0'。格式[]...]表示字符集中包含字符]
% 字面值%,不进行赋值
c99标准
❷ C语言字符串问题
1. 字符串初始化,如果逐个赋值的话,系统不一定会自动添加'\0',除非指定了长度且指定的长度大于等于你赋值的字符的个数加1,即最小为你赋值的字符个数加1。假设你指定的字符个数为n,长度为len,则系统会将剩下的(len-n)个元素都赋值为'\0',当n等于len时,不会添加任何'\0'。
之所以出现图1的情况,是因为当前栈顶刚好等于(纯粹是碰巧)'\0',假设当前栈顶为100,则有[100]='\0';,而为m_str分配内存时,栈顶要减4,因为栈设计成了先自减(即分配内存)后入栈,于是[100]='\0';[99]='P';[98]='O';[97]='T';[96]='S';m_str赋值为地址96,当前栈顶为96。当为u_str分配内存时,栈顶又要减4,于是[100]='\0';[99]='P';[98]='O';[97]='T';[96]='S';[95]='P';[94]='O';[93]='T';[92]='S';u_str赋值为地址92,当前栈顶为92。当计算m_str的长度时会从最低96开始,一直计算到99(遇到第一个'\0'前停止),所以m_str的长度为4,同理,计算u_str的长度时会从92开始,一直计算到99,所以其长度为8,从以上分析中显然可以看出,这两个字符串是不相等的,所以strcmp返回-1。
图2就不用过多解释了,手动添加了'\0',输出自然是那样的。又由上面对于图1的解释,要分析出出现图3和图4的原因,也是很容易的了,这里也不解释了。
❸ C语言程序设计的占位符问题
整形变量占位符就是用%d
%lf是double的占位符
float类型变量也可以用占位符%f,如果用%d,那打印出来的就是整形的
%i最好不用
字符输入数据;变元类型
d十进制整数;int*
i整数;int*。该整数可以是以0开头的八进制数,也可以是以0x/0X开头的十六进制数
o八进制数(可以带或不带前导0);unsignedint*
u无符号十进制整数;unsignedint*
x十六进制整数(可以带或不带前导0x/0X);unsignedint*
c字符;char*。按照字段宽的大小把读入的字符保存在指定的数组中,不加入字符''。字段宽的缺省值为1。在这种情况下,不跳过空白符;如果要读入下一个非空白符,使用%1s(数字1)
s有非空白符组成的字符串(不包含引号);char*。该变元指针指向一个字符数组,该字符数组有足够空间来保存该字符串以及在末尾添加的''
e/f/g浮点数;float*。float浮点数的输入格式为:一个任选的正负号,一串可能包含小数点的数字和一个任选的指数字段。指数字段由字母e/E以及后跟的一个可能带正负号的整数组成
p用printf("%p")调用输出的指针值;void*
n将到目前为止此调用所读的字符数写入变元;int*。不读入输入字符。不增加转换项目计数
[...]用方括号括起来的字符集中的字符来匹配输入,以找到最长的非空字符串;char*。在末尾添加''。格式[]...]表示字符集中包含字符]
[^...]用不在方括号里的字符集中的字符来匹配输入,以找到最长的非空字符串;char*。在末尾添加''。格式[]...]表示字符集中包含字符]
%字面值%,不进行赋值
c99标准
❹ c语言关于字符串分配空间的问题
要实现动态内存的分配,除了利用含指针成员的结构体之外,还需利用C语言提供的几个标准库函数。(使用时应包含头文件“alloc.h”或“malloc.h”或“stdlib.h”)
1.malloc函数
函数原型为void *malloc(unsigned int size);在内存的动态存储区中分配一块长度为"size" 字节的连续区域。函数的返回值为该区域的首地址。 “类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。“size”是一个无符号数。例如: pc=(char *) malloc (100); 表示分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针, 把该指针赋予指针变量pc。若size超出可用空间,则返回空指针值NULL。
2.calloc 函数
函数原型为void *calloc(unsigned int num, unsigned int size)
按所给数据个数和每个数据所占字节数开辟存储空间。其中num为数据个数,size为每个数据所占字节数,故开辟的总字节数为 num*size。函数返回该存储区的起始地址。calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。例如: ps=(struct stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。
3. realloc函数:
函数原型为void *realloc(void *ptr, unsigned int size)
重新定义所开辟内存空间的大小。其中ptr所指的内存空间是用前述函数已开辟的,size为新的空间大小,其值可比原来大或小。函数返回新存储区的起始地 址(该地址可能与以前的地址不同)。例如p1=(float *)realloc(p1,16);将原先开辟的8个字节调整为16个字节。
❺ c语言 字符串排列问题
/*
abc 3
123 2
def 1
222 1
dec 1
Press any key to continue
*/
#include<stdio.h>
#include<string.h>
typedefstructtag{
charstr[10];
inttimes;
}data;
voidSort(dataa[],intn){
inti,j,k;
datatmp;
for(i=0;i<n-1;++i){
k=i;
for(j=i+1;j<n;++j){
if(a[k].times<a[j].times)
k=j;
}
if(k!=i){
tmp=a[k];
a[k]=a[i];
a[i]=tmp;
}
}
}
intHasNo(dataa[],intn,chars[]){
inti;
for(i=0;i<n;++i){
if(strcmp(a[i].str,s)==0)
returni;
}
return-1;
}
intmain(){
chars[]="abcdefabc123222123abcdecdef";
dataa[50]={{0,0}};
chart[10];
inti=0,j=0,n=0,res;
do{
if(s[i]==''){
t[j]='