IOS开发教程之C语言数组和字符串

2020-01-14 14:37:59刘景俊

扩展--字符串操作常用函数

下面简单看一下和字符和字符串相关的常用的几个函数


//
// main.c
// ArrayAndString
//
// Created by Kenshin Cui on 14-7-04.
// Copyright (c) 2014年 Kenshin Cui. All rights reserved.
//

#include <stdio.h>

int main(int argc, const char * argv[])
{
  /*字符操作*/
  putchar('a'); //结果:a,putchar一次只能输出一个字符
  printf("n");
  putchar(97);//结果:a
  printf("n");
  char a;
  a=getchar();//getchar()一次只能接收一个字符,可以接收空格、tab、回车
  printf("a=%c",a);
  printf("n");

  /*字符串操作*/
  char b[]="Kenshin";
  printf("b=%s",b);
  printf("n");
  puts(b); //puts用于输出单个字符串,不能像printf格式化输出,会自动添加换行
  printf("n");
  
  char c[10];
  scanf("%s",c);//注意c没必要写成&c,因为c本身就代表了数组的地址
  printf("c=%sn",c);//注意即使你输入的内容大于10,也能正确输出,但是下面的gets()函数却不行
  printf("n");
  
  //gets()函数,注意它是不安全的,因为接收的时候不知道它的大小容易造成溢出,建议不要使用
  char d[10];
  gets(d); //gets一次只能接收一个字符串,但是scanf可接收多个;scanf不能接收空格、tab,gets则可以
  printf("d=%s",d);
  printf("n");
  
  char e[]={'K','s',''};
  printf("%lu",strlen(e)); //结果是:2,不是3,因为不计入长度
  printf("n");
  char f[]={"Kenshin"};
  printf("%lu",strlen(f)); //结果是:7
  printf("n");
  
  char g[5];
  strcpy(g,"hello,world!");
  printf("%s",g); //结果是:hello,即使定义的g长度为5,但是也能完全拷贝进去
  printf("n");
  char h[5];
  char i[]={'a','b','c','','d','e','f',''};
  strcpy(h,i);
  printf("%s",h); //结果是:abc,遇到第一个则结束
  printf("n");
  
  strcat(i,"ghi");
  printf("%s",i); //结果是:abcghi,注意不是abcdefghi,strcat,从i第一开始使用“ghi”覆盖,覆盖完之后加上一个,在内存中目前应该是:{'a','b','c','g','h','i','','f',''}
  printf("n");
  
  char j[]="abc";
  char k[]="aBc";
  char l[]="acb";
  char m[]={'a',''};
  printf("%d,%d,%d",strcmp(j,k),strcmp(k,l),strcmp(l,m));//遇到第一个不相同的字符或则返回两者前后之差,结果:32,-33,99
  printf("n");

  return 0;
}

注意在Xcode中会提示gets是不安全的,因为Xcode使用的是gcc编译器,在gcc编译器中已经不能正确编译gets()函数,推荐使用fgets()。