C语言字符和字符串随记
==========================
第11章 字符和字符串函数
==========================
震惊:
字符串常量属于静态存储类,常量引号中的内容作为指向该字符串存储位置的指针:
printf("%s, %p, %c\n","we","are",*"young!");语句执行的结果如下:
we, 0x4005e4, y
字符串的数组声明:
char str[] = "string A"; <=> char[] str = {'s','t','r','i','n','g',' ','A','\0'};
注意右边的声明最后需要加上‘\0’标志,如果不加,得到的就是一个字符数组而不是字符串
但实验证实不加的话,以'%s'的方式仍然能够输出,不会多输出;
根据上面条件,有下面等式成立:
str == &str[0], *str == str[0] =='s', *(str+1) == str[1] =='t'
本质仍是数组,所以指针的一套可以用:
char str[] = "String A!"; <=> char *ptr = "String A!";
这个不能进行++str操作,可进行*(str+i)操作 而这个可以进行++str操作,也可进行ptr[i]操作
本质原因前者是地址常量,后者是指针变量
数组初始化是从静态存储区把一个字符串复制给数组,而指针初始化只是将字符串的地址赋值给指针变量
============================================================
#include <stdio.h>
int main(void)
{
char *ptr = "String";
//ptr[0] = 'A'; //编译器偷懒可能导致String只有一个拷贝,公用品不能单改
printf("String ");
printf("%s %s\n",ptr,"String");
return 0;
}
============================================================
char *str[5] 约等于 char[X][5],两者用法大致相同,但存储原理不同
gets()函数不会检查输入是否大于分配的存储空间,所以更安全的做法是使用fgets()函数,但也更麻烦。
不加换行符的puts()代码;
void putss(const char * string)
{
while(*string!='\0') //如用while(*string),也可,最简洁,略有不同
putchar(*string++);
}
或
void putss(const char * string)
{
int i = 0;
while(string[i]!='\0')
putchar(string[i++]);
}
C语言字符和字符串随记的更多相关文章
- C语言字符,字符串,字节操作常用函数
strlen 这个函数是在 string.h 的头文件中定义的 它的函数原型是 size_t strlen( const char ); size_t 是一个无符号整型,是这样定义的 typedef ...
- C 语言字符 和字符串输出
int main(void){ char ch; char str[80]; printf("Input a string: "); //先输入字符串 gets(str);/ ...
- Swift语言指南(十)--字符串与字符
原文:Swift语言指南(十)--字符串与字符 字符串是一段字符的有序集合,如"hellow,world"或"信天翁".Swift 中的字符串由 String ...
- C语言中的字符和字符串
C语言在中常常出现字符和字符串,而一串字符或者字符串其实就是数组 字符数组的定义 char arr[]={'h','e','l','l','o','\0'}; 而定义字符串: char arr1[]= ...
- c语言字符数组与字符串的使用详解
转自:http://www.jb51.net/article/37456.htm 1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ ...
- C 语言实例 - 查找字符在字符串中出现的次数
C 语言实例 - 查找字符在字符串中出现的次数 C 语言实例 C 语言实例 查找字符在字符串中的起始位置(索引值从 开始). 实例 #include <stdio.h> int main( ...
- C语言之“字符”与“字符串”之间的区别解析
在C语言中,“字符”与“字符串”之间,是有区别的.这一篇文章中,我们将介绍一下,在C语言中的“字符”与“字符串”,它们之间的区别. 首先,一个很明显的区别是: “字符”,使用单引号作为定界符,而“字符 ...
- sql语言:如何查询字符串某个字符的个数?
sql语言:如何查询字符串某个字符的个数? 这语句太精彩了! select len('05011045')-len(replace('05011045','0',''))
- Java语言程序设计(基础篇) 第四章 数学函数、字符和字符串
第四章 数学函数.字符和字符串 4.2 常用数学函数 方法分三类:三角函数方法(trigonometric method).指数函数方法(exponent method)和服务方法(service m ...
随机推荐
- Java API设计CheckList
API设计原则:正确.好名.易用.易学.够快.够小.但我们从来不缺原则,〜〜〜 Interface 1.The Importance of Being Use Case Oriented,一个接口应当 ...
- phonegap退出android程序
最近用android做了一个程序,在点“后退”的时候,会不停地后退,感觉不好. 查了些资料有这么些: 一.toast_plugin插件 <script type="text/javas ...
- Nginx 配置指令的执行顺序(十)
运行在 post-rewrite 阶段之后的是所谓的 preaccess 阶段.该阶段在 access 阶段之前执行,故名preaccess. 标准模块 ngx_limit_req 和 ngx_lim ...
- Nand flash 的发展和eMMC
讨论到eMMC的发展历程,必须要从介绍Flash的历史开始 Flash分为两种规格:NOR Flash和NAND Flash,两者均为非易失性闪存模块. 1988年,Intel首次发出NOR flas ...
- 实用的PHP正则表达式
正则表达式是程序开发中一个重要的元素,它提供用来描述或匹配文本的字符串,如特定的字符.词或算式等.但在某些情况下,用正则表达式去验证一个字符串比较复杂和费时.本文为你介绍10种常见的实用PHP正则表达 ...
- Linux下安装nfs服务器
1. 安装nfs服务 $sudo apt-get install nfs-kernel-server portmap 2. 在配置文件/etc/exports中添加以下内容/home/jxhui/nf ...
- PF_RING packet overwrites
最近在用 PF_RING 抓包过程中,发现个灵异的现象,高流量丢包时, 经常会出现正在处理的包的内容被覆盖.开始,怀疑是不是自己程序有地方越界写了,后来发现,如果自己拷贝一份,然后处理拷贝的那份,永远 ...
- [Leetcode][Python]44:Wildcard Matching
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 44:Wildcard Matchinghttps://oj.leetcode ...
- VC6使用技巧
1.检测程序中的括号是否匹配 把光标移动到需要检测的括号(如大括号{}.方括号[].圆括号()和尖括号<>)前面,键入快捷键“Ctrl+]”.如果括号匹配正确,光标就跳到匹配的括号处,否则 ...
- Windows上安装Xampp后通过命令行进入MariaDB
题外话:读<MYSQL必知必会>,书中让我找个数据库服务器练手,我就去下了个Xampp,由于看的08年网易上的动态网站开发,那个时候Xampp中的m代表MYSQL,后来通过命令行进入MYS ...