1.sizeof()和strlen()的区别:
sizeof():以字节为单位返回其整个长度的大小(总),在编译阶段便开始起作用适用于绝大多数类型;
strlen():测试字符型数组的长度,其他类型不可以,遇见 ‘\0’ 终止(实际),即求已存在的长度;
/*===============================================
* 文件名称:1.c
* 创 建 者:
* 创建日期:2022年04月08日
* 描 述:
================================================*/
#include <stdio.h>
int main(int argc, char *argv[])
{
char s1[10] = "abcd!";
char *s2 = "\n123\\";
// 指针 占八个字节
char *s3 = "\n";
// 指针
char s4[10] = "\n123\\";
// \n 一个字符,转行
// \\ 一个字符,反斜杠+转义字符
printf("strlen(s1)=%d,sizeof(s2)%d\n",strlen(s1),sizeof(s2));
printf("sizeof(s1)=%d\n",sizeof(s1)); //若,初始化不对,及其容易造成野指针
printf("sizeof(s3)=%d\n",sizeof(s3));
printf("strlen(s4)=%d\n",strlen(s4));
return 0;
} 野指针:指针未初始化或全部初始化。
root@ubuntu:/C# ./a.out
strlen(s1)=5,sizeof(s2)8
sizeof(s1)=10
sizeof(s3)=8
strlen(s4)=5
2.存储溢出
char p = 255; //有符号字符存储长度 -128~127
注意:不要错认为是先将等号右边算完(包含自增自减),再赋值给左边。实际上也是将等号右边算完,在赋值给等号左边,但是自增自减例外
自增自减:先拿来使用,再加1或者减1
这里也要考虑优先级,具体需要读者自己体会!!!
/*===============================================
* 文件名称:111.c
* 创 建 者:
* 创建日期:2022年04月08日
* 描 述:
================================================*/
#include <stdio.h>
int main(int argc, char *argv[])
{
int a=1,b=0;
char c,d;
c = 255;
// 字符占一个字节,即八个二进制位(加一个符号位)
// c溢出,但是既然存储了,只能将符号位拿来使用
// 但是机器不一样,既然符号位是1,就认为该数是负数,自动取反加一
b = a++;
printf("c:%d\n",c++);
//因此这里输出 -1
d = c++ + 1;
printf("d:%d\n",d);
printf("b:%d\n",b);
return 0;
} root@ubuntu:/C# ./a.out
c:-1
d:1
b:1
3.输入5个国家的英文名称,按字母排序输出
Eg:
输入:Spain China Italy Germany French
输出: China French Germany Italy Spain
6 * 输入5个国家的英文名称,按字母排序输出
7 Eg:
8 输入:Spain China Italy Germany French
9
10 输出: China French Germany Italy Spain
11 ================================================*/
7 #include <stdio.h>
8 #include <string.h>
9 int main(int argc, char *argv[])
10 {
11 char str[][10]={"Spain","China","Italy","Germany","French"};
12 int i,j;
13 char temp[10]={0};
14 int n=sizeof(str)/sizeof(str[0]);
15 for(i=0;i<n;i++){
16 printf("%s ",str[i]);
17 }
18 printf("\n");
19 for(i=0;i<n-1;i++){ //控制交换的前者
20 for(j=i+1;j<n;j++){ //控制交换的后者
21 if(0 > strcmp(str[j],str[i])){
22 strcpy(temp,str[i]);
23 strcpy(str[i],str[j]);
24 strcpy(str[j],temp);
25 }
26 }
27 }
28 for(i=0;i<n;i++){
29 printf("%s ",str[i]);
30 }
31 printf("\n");
32 return 0;
33 }
root@ubuntu:/C/three_text# ./a.out
Spain China Italy Germany French
China French Germany Italy Spain 4.放入一个带空格的字符串,输出删除空格的字符串
#include <stdio.h>
#include <string.h>
#define N 100
void del(char *str)
{
char *p=str;
char *q=NULL;
while(*p)
{
if(*p != ' ')
p++;
else
{
q=p;
while(*q)
{
*q=*(q+1);
q++;
}
}
}
puts(str);
}
int main(int argc, char *argv[])
{
char str[N]={0};
puts("请放入一个字符串str:");
gets(str);
del(str);
return 0;
} root@ubuntu:/C/three_text# ./a.out
请放入一个字符串str:
sd ad
sdad5.输入一个整数字符串转换为一个整数值,如”1234”转换为1234,”-1234”转换为-1234。编写转换函数chnum。
输入一个整数字符串转换为一个整数值.
如”1234”转换为1234,”-1234”转换为-1234。编写转换函数chnum。
================================================*/
#include <stdio.h>
#include <string.h>
#define N 100
char chnum(char *str)
{
int i=0;
char *p;
p = str;
while(*p != '\0')
{
if(*p>'0' && *p<'9')
i = i*10 + *p - 48;
p++;
}
return str;
}
int main(int argc, char *argv[])
{
int m,n,i;
char str[N]={0};
puts("please input int-str:");
gets(str);
if(str[0] == '-')
{
m = -chnum(str+1);
}
else
{
chnum(str);
}
puts("输入的数字字符串转变为数字串:");
puts(str);
return 0;
}root@ubuntu:/C# ./a.out
please input int-str:
1234
输入的数字字符串转变为数字串:
1234
root@ubuntu:/C# ./a.out
please input int-str:
-1234
输入的数字字符串转变为数字串:
-12346.请编写一个函数func, 用来删除字符串中的所有空格。
例如, 输入asd af aa z67, 则输出为 asdafaaz67。
6 请编写一个函数func, 用来删除字符串中的所有空格。
7 例如, 输入asd af aa z67, 则输出为 asdafaaz67。
8 ================================================*/
9 #include <stdio.h>
10 #include <string.h>
11 #define N 100
12 void func(char *p)
13 {
14 int j=0;
15 for(int i=0;p[i] != '\0';i++)
16 {
17 if(i==0 && p[i] != ' ')
18 p[j++] = &p[i];
19 else if(p[i] != ' ' && p[i-1] == ' ')
20 {
21 p[j++] = &p[i];
22 }
23 }
24 for(int i=0;p[i] != '\0';i++)
25 {
26 if(p[i] == ' ')
27 p[i] = NULL;
28 }
29 for(int i=0;i<6;i++)
30 puts(p[i]);
31 }
32 int main(int argc,char *argv[])
33 {
34 char str[60]= {0};
35 char *p;
36 p = str;
37 puts("please input a str:");
38 gets(str);
39 func(p);
40 return 0;
41 }7.下面程序的功能是将从键盘输入的偶数写成两个素数
1 /*=============================================== 2 * 文件名称:t.c 3 * 创 建 者: 4 * 创建日期:2022年06月28日 5 * 描 述:编译带 -lm 6 * 从键盘输入的偶数写成两个素数的和 7 ================================================*/ 8 #include <stdio.h> 9 #include <math.h> 10 int main(int argc, char *argv[]) 11 { 12 int a,b,c,d; 13 scanf("%d",&a); 14 for(b=3;b<=a/2;b+=2){ 15 for(c=2;c<=sqrt(b);c++) //寻找第一个素数 16 if(b%c==0) //寻找的不是素数,例如偶数为22,这是b为9 17 break; 18 if(c>sqrt(b)) //d是以一个素数 19 d=a-b; 20 else 21 continue; 22 for(c=2;c<=sqrt(d);c++) //与上面同理 23 if(d%c==0) 24 break; 25 if(c>sqrt(d)) 26 printf("%d=%d+%d\n",a,b,d); 27 } 28 printf("\n"); 29 return 0; 30 }
版权声明:本文为hold_the_key原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。