c语言字符串处理
1)c语言字符串:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
char ch[] = {'a', 'b', 'c', '\0'};
char ch1[] = {'x', 'y', 'z'};
printf("%s\n", ch1);
//输出xyzabc,因为是从内存地址中由高到低的输出直到\0
//先定义的在高地址,后定义的在低地址
//char ch[] = "abc"; 这样不会出现问题
puts(ch);
puts(&ch[1]);
//输出abc,可以自动换行
gets(ch);
puts(ch);
//使用gets会给出一个警告
//不安全:数组长度是100,但是如果你输入了120个字符,存在越界
//可以接受空格
strcat(ch, ch1);
puts(ch);
//strcat(oldstr, newstr);
//older的长度要足够保存下oldstr+newstr
//newstr 把oldstr的最后一个字\0给覆盖了
return 0;
}
//字符串的输入输出
#include <stdio.h>
int main(int argc, char *argv[]) {
char ch[] = "ias";
//查看字符串用for比较麻烦,可以用%s输出一个字符串
//从给定的地址开始,一直输出字符,直到遇到\0就停止来
printf("%s\n", ch);
//输出ias
printf("%s\n", &ch[1]);
//输出as
char str3[10];
// 从键盘上接受一个字符串,保存在以str为首地址的字符数组中
scanf("%s", str3);
printf("%s", str3);
//如果以%s格式进行输入的话,注意空格问题
//如果输入的字符串有空格,则空格之后的字符无法被接收保存
//输入的字符串的长度要小于数组的长度
return 0;
}
2)c语言指针:
// int *ptr = &x; 其实就是下面的两条语句组合:
// int *ptr;
// ptr = &x;
/*野指针不能随便修改内容,容易引发系统奔溃,老师这样说的不知道是不是真的,有点怀疑,难道做编译器的人都是傻子吗
int *p;
*p = 98;
//二级指针和多级指针
/*
//指针求逆序数组
/*#include <stdio.h>
void swap(int *i, int *j){
int temp;
while(i < j){
temp = *i;
*i = *j;
*j = temp;
i++;
j--;
}
}
int main(int argc, char *argv[]) {
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *i = &a[0];
int *j = &a[9];
swap(i, j);
for(int i = 0; i <= 9; i++){
printf("%d ", a[i]);
}
return 0;
}
3)fget和fputs函数使用:
安全的fgets函数
char ch [10];
fgets(ch, sizeof(ch), stdin);
可以根据数组长度自动截取适当的长度保存
printf("%s\n", ch);
fgets(数组名,数组大小,标准键盘输入);
从输入缓冲区读取一个字符串保存到字符数组中
当输入的字符串的长度大于数组长度,此时自动吧数组的最后一个元素变成\0
当输入长度小于数组长度时则会接受一个换行
strlen(ch)不包含\0
fputs是不会自动换行的
puts可以自动换行
使用gets()和scanf()都是不安全的
gets()可以接收空格,但scanf()不可以接收空格空格之后不接受
printf() %s 不可以自动换行
puts() 可以自动换行
fputs 不可以自动换行