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 ...
随机推荐
- [Linked List]Convert Sorted List to Binary Search Tree
Total Accepted: 57775 Total Submissions: 198972 Difficulty: Medium Given a singly linked list where ...
- 使用NODEJS+REDIS开发一个消息队列以及定时任务处理
作者:RobanLee 原创文章,转载请注明: 萝卜李 http://www.robanlee.com 源码在这里: https://github.com/robanlee123/RobCron 时间 ...
- 解决rsync 同步auth failed on module问题
今天在同步备份文件时遇到一个情况,以前正常的备份,在昨天突然同步备份文件失败了.于是开始检查原因..... 报错日志/var/log/rsyncd.log发现错误 // :: [] auth fail ...
- oracle DBLink
现有两个oracle DB为A和B,为了能在A数据库中对B数据库进行操作,我们需要在A数据库中建立对B的DBLink. 在创建DBLink之前,我们首先去检查下DB A的global_names ...
- Java虚拟机:JVM中的Stack和Heap
简单的了解一下JVM中的栈和堆 在JVM中,内存分为两个部分,Stack(栈)和Heap(堆),这里,我们从JVM的内存管理原理的角度来认识Stack和Heap,并通过这些原理认清Java中静态方法和 ...
- 浅谈UE4引擎
首先要说的是,游戏开发是一项高度复杂的代码开发工作,编程语言只是最基本的知识,它涉及的内容还有计算机图形学.3D数学.物理学等复杂的学科.但是若需要学完这么多知识才能开发游戏,恐怕许多人都已经断气了, ...
- shell全备份脚本(借鉴别人的,在其基础上修复完善了bug)
#!/bin/bash # Shell script to backup MySql database # Last updated: Aug - MyUSER="root" # ...
- SQL Server 创建全文索引
背景知识: 全文目录是全文索引是容器.所以在创建全文索引前要有全文目录. 第一步: 创建全文目录: create fulltext catalog catalog_name [on filegroup ...
- 利用Azure Automation实现云端自动化运维(2)
Azure automation的认证: 用户名和密码 在Azure的automation中使用Powershell可以管理当前订阅的资源,也可以管理不同订阅的资源,那么问题就来了,安全性如何 ...
- lhgDialog
应用到你的项目 如果您使用独立版本的lhgDialog窗口组件,您只需在页面head中引入lhgcore.lhgdialog.min.js文件,4.1.1+版本做了修改可以和jQuerya库同时引用, ...