一. runoobstruct
/*【WindowsCMD】
gcc -fexec-charset=GBK a1.c -o a1 ; .\a1.exe
gcc -fexec-charset=GBK a1.c -o a1.exe ; .\a1.exe
gcc -S a1.c (反编译 assembler language)
*/
#include<stdio.h> //printf vscode=CTRLShift+L选中变量名批量修改
#include<string.h> //strlen
#define STRING "hello world"
int main(){
char str0[12]="hello world";
printf("【1】string/charAarray = %s \n",str0); //stdio.h
char str[]=STRING;
//stringBytesOccupied12('\0'空字符) stringLength11
printf("【2】%d\t%d\n【3】",sizeof(str),strlen(str));
for(int i=0;i<sizeof(str);i++)printf("%c",str[i]);
printf("\n【4】");
for(int i=0;i<strlen(str);i++){printf("%c",str[i]);};
printf("\n【5】越界: ");
for(int i=0;i<strlen(str)+12*10;i++){printf("%c",str[i]);};
return 0;
}
#include<stdio.h> //printf
#include<string.h> //strlen strchr
#include<stdlib.h> //system("pause") 请按任意键继续...
int main(){
char str[]="hello world";
char *s1,*s2; //Declare two character pointers
s1=str; //s1指向str数组了 当然也可以越界
for(int i=0;i<strlen(str)+1;i++){printf("(%d,%d,%c) ",&s1[i],s1[i],s1[i]);}
printf("%s\n",s1);
s1=strchr(str,'o'); //s1指向str[4]='o'的地址
printf("%d %d %c\n",s1,&str[4],*s1);
s2=strchr(str,'G');
if(s2==NULL){printf("【1】str字符串中没有G\n");}
printf("【2】");system("pause");
return 0;
}
#include<stdio.h> //printf scanf getchar
#include<string.h> //strlen
int main(){
int index;
printf("【1】请输入索引值:");
scanf("%d", &index); //需要键盘输入Enter,index才获取qvte
printf("%d\n",index);
int c;
printf("【2】因键盘前次输Enter键 下面循环语句未执行!\n");
while ((c = getchar()) != '\n') printf("%c", c);
printf("【3】第二个循环(以Enter结束): ");
while ((c = getchar()) != '\n') printf("%c", c);
char str[20];//stringLen=19 占字符数=20 str[19]='\0'结束;
printf("\n【4】请输入字符串:");
char *ch=fgets(str,7,stdin);//只选取键盘输前面6字符(可以小于6字符)给str
printf("str=%s strlen=%d sizeof=%d\n",str,strlen(str),sizeof(str));
printf("str首字符地址=%d *ch=%c sizeof(*ch)=%d \n",ch,*ch,sizeof(*ch));
for(int i=0;i<strlen(str);i++)printf("%c",ch[i]);//但遍历可以使用
printf("\n");
return 0;
}
#include<stdio.h> //printf scanf getchar
#include<string.h> //strlen
char*s_gets(char*,int);
int main(){
char title[6]; //字符数组所有字符元素为空 title[1]='\0'
printf("【0】字符数组所有字符元素为空 title=%s\n",title);
//getchar();//是否需要该代码 (从键盘获取一个个字符Enter结束)
char *res=s_gets(title,6);
printf("\n【e】title=%s res=(%d,%c)",title,res,*res);
return 0;
}
char * s_gets(char * st, int n){
char * ret_val;
char * find;
printf("【1】stdin键盘输入(还可能存在其他方式输入): ");
//故st字符串中间存在可能存在只换行但是不Enter的字符'\n'情形
ret_val = fgets(st, n, stdin);
printf("【2】ret_val = (%d %c) str = %s\n",ret_val,*ret_val,st);
if (ret_val)
{
printf("【3】进入判断\n");
find = strchr(st, '\n'); //查找换行符
if (find) // 查找地址不为空
*find = '\0'; //在此处放入一个空字符
else
printf("【4】find=%d(代表没有找到)",find);
while (getchar() != '\n')continue; //处理剩余字符
}
return ret_val;
}