sizeof和strlen
我在虚拟机里的ubuntu下跑以下程序#include <stdio.h>
#include <string.h>
int main()
{
unsigned char *name = "fishc\0";
ussinged char d = {'f', 'i', 's', 'h', 'c', '\0'};
printf("length of name is %d\n", strlen(name);
printf("length of d is %d\n", strlen(d);
return 0;
}
运行后,显示的结果都是一样的长度,都是5。
如果我把strlen换成siezof,结果就不一样了。name的长度显示为4,d的长度显示为6。
有点不明白。为什么用sizeof会出现差异呢? ussinged 是什么鬼 siezof。。。你确定不是sizeof? 三个问题:
1. "fishc\0" 双引号的字符串会自动追加 '\0',不用自己添加,所以写 "fishc" 即可;
2. sizeof 是运算符,strlen 是计算字符个数的函数。sizeof 返回 name 为 4,是因为 name 是一个指针变量(在你的编译系统占 4 个字节),而 d 是一个数组,sizefof 会帮你计算数组的长度,也就是有多少个元素,那你这里有 6 个元素,所以返回 6。
3. 定义字符串的时候不用特别声明 unsigned char,直接 char 即可,因为标准 ASCII 码只有 127 位,所以 signed 和 unsigned 都够放哈~~~
{:10_273:} sizeof是返回的是指针占内存的长度 你这个char字符串就可以被看成一个指针
strlen是一直读取字符串,直到\0出现才结束 黑龍 发表于 2016-1-17 14:54
siezof。。。你确定不是sizeof?
额我是在虚拟机里跑代码的
切换回windows再手打时打错了.... 小甲鱼 发表于 2016-1-17 14:55
三个问题:
1. "fishc\0" 双引号的字符串会自动追加 '\0',不用自己添加,所以写 "fishc" 即可;
谢谢小甲鱼~strlen确实是遇到\0就停止了
还有个问题,跟视频你演示的不一致。
比如我定义了
char b = {'f','i','s','h','c'};
最后用printf打印时...并没有出现fishc*#(#*(这种,而是完整的显示了fishc...
请问这是什么原因哦... bravo 发表于 2016-1-17 18:05
谢谢小甲鱼~strlen确实是遇到\0就停止了
你定义字符串数组的时候错了
char b = {'f','i','s','h','c'};
编译器会自动在后面添加一个字符“\0”
页:
[1]