linux下C语言中的字符数组与字符串

目的

C语言中的字符指针、字符数组跟字符串在程序中经常用到,下面的程序列出了对这些变量的一些简单操作以及输出结果:

源码charPointer.c

 

#include <stdio.h>

int main(){
  char s1[]="abcde";
  char s2[]={'f','g','h','i','j'};
  char *s3;
  printf("1:char[] s1: value \"abcde\"\nchar[] s2: value ['f','g','h','i','j']\nchar *s3: value null\n\n");
  printf("2: strlen(s1)=%d\tstrlen(s2)=%d\n",strlen(s1),strlen(s2));
  printf("sizeof s1 = %d\tsizeof s2 = %d\n\n",sizeof s1,sizeof s2);
  printf("3: pointer:\ns1=0x%x\ns2=0x%x\ns3=0x%x\n\n",s1,s2,s3);
  printf("pointer+1:\ns1+1=%c\ns2+1=%c\n\n",*(s1+1),*(s2+1));
  s3=s1;
  printf("4: let s3=s1\n");
  printf("s3=0x%x,*s3=%c\t*(s3+1)=%c\n",s3,*s3,*(s3+1));
  printf("s3+2=0x%x\n\n",s3+2);
  s3=s2;
  printf("5: let s3=s2\n");
  printf("s3=0x%x\t*s3=%c\t*(s3+1)=%c\n\n",s3,*s3,*(s3+1));

  printf("6: declare:char s4[6]\n");
  char s4[6];
  printf("try to assign s4=\"abcde\" or {\'a\',\'b\',\'c\',\'d\',\'e\'}\nError!\n\n");
  // s4 = "abcde"; //error assignment!
  //s4 = {'a','b','c','d','e'};
  printf("7: declare:char *s5\n");
  char *s5;
  printf("try to assign s5=\"abcde\"\n");
  s5="abcde";
  printf("s5=%s\t  it\'s ok\n",s5);
  printf("try to assign s5 = {\'a\',\'b\',\'c\',\'d\',\'e\'}\nError!\n");
  //s5 = {'f','g','h','i','j'};
  //printf("s5=%s\n",s5);
  
  return 0;
}


输出

1:char[] s1: value "abcde"
char[] s2: value ['f','g','h','i','j']
char *s3: value null

2: strlen(s1)=5	strlen(s2)=5
sizeof s1 = 6	sizeof s2 = 5

3: pointer:
s1=0xbf81fddb
s2=0xbf81fde7
s3=0xffffffff

pointer+1:
s1+1=b
s2+1=g

4: let s3=s1
s3=0xbf81fddb,*s3=a	*(s3+1)=b
s3+2=0xbf81fddd

5: let s3=s2
s3=0xbf81fde7	*s3=f	*(s3+1)=g

6: declare:char s4[6]
try to assign s4="abcde" or {'a','b','c','d','e'}
Error!

7: declare:char *s5
try to assign s5="abcde"
s5=abcde	  it's ok
try to assign s5 = {'a','b','c','d','e'}
Error!

Makefile 

# This is a Makefile built by YBH on 2012/10/19 10:00

# Variables
TARGET=charPointer
SOURCE1=charPointer.c

# Compile command
# 	$@: target name, $TARGET in this section
#	$<: first dependent file, $SOURCE in this section
$(TARGET):$(SOURCE1)
	gcc -o $@ $< 
#	gcc -o $TARGET $SOURCE

一点总结

 1、本程序用到了两种类型:字符数组和字符指针。字符数组的两种赋值方式“”和[ ]。

有的教程说字符数组(本例中的s1,s2)变量不能进行加减算数运算,但本例可以正常运行,没有出现错误。

字符指针进行加减运算没问题。

2、使用“”给字符串赋值:“”会产生一个新的字符串以及该字符串地址(char*,字符串指针变量),并将该地址赋值给字符数组变量或者字符指针变量。

char s[] = "abcd";    // sizeof s = 5

// s = “123456”;       // error: incompatible tyeps when assigning to char [5] from type 'char*'

char s0[] = NULL;   // 会产生一个char[1]的字符数组

// s0="123456";       // error: incompatible tyeps when assigning to char [1] from type 'char*'

char *s1=NULL;     // s1地址0x0,内容为null

s1="12345";            // 将新的字符串地址传递给变量s1,it's ok

3、{}的用法比较少,好像只能在声明的时候才用到。

char s[] = {'1','2','3','4','5'};

char s1[4];

//s1 = {'1','2','3','4'};  //error: expected expression before '{' token

 

文件下载链接:源文件+Makefile+可执行文件

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值