c语言-C语言关于字符串长度的问题

问题描述

C语言关于字符串长度的问题
main()
{
char str[]=""La16ef"";
printf(""%dn""sizeof(str));
}
程序的运行结果为6,我明白,但是如果将字符串改为""La18ef"";,
就是把6改为其他的数字,结果就为7了,为什么?谢谢了。

解决方案

为什么不求 strlen 而是 sizeof 呢?
第一,sizeof 会多算一个字符串结束符
第二,8进制数的处理,编译器会将 能当做一个字节8进制的数做为一个字符处理,否则算一个单独的字符。

解决方案二:

 16  当做8进制处理  18  不会当做8进制

解决方案三:
追问一下
L 明显是不符合转义字符的定义的
所有的编译当会把它当一个字符'L'处理吗?
gcc会报wanring
warning: unknown escape sequence: 'L' [enabled by default]
把它当'L'处理

解决方案四:
唉 楼主应该 看一下 转义这章 ddd代表的含义 以及用法 你见过在八进制中出现8这个数字吗 就相当于 你见过在二进制中出现2这个数字吗

时间: 2024-12-05 17:40:44

c语言-C语言关于字符串长度的问题的相关文章

C++不使用变量求字符串长度strlen函数的实现方法_C 语言

本文实例讲述了C++不使用变量求字符串长度strlen函数的实现方法.分享给大家供大家参考.具体实现方法如下: 1.strlen的源码实现: size_t strlen(const char *str) //strlen不做内存非法判断,如果是NULL,会core. { const char *eos=str; while(*eos++); return (eos-str-1); } 2.常见面试题会要求不使用额外变量,实现strlen函数: 实现一: int strlen(const char

C语言OJ项目参考(2417) 字符串长度

2417: 字符串长度 Description 写一函数,求一个字符串的长度.在main函数中输入字符串,并输出其长度. Input 一行字符串 Output 字符串长度 Sample Input** t9g(*&WE3@#$fw2adECWEr Sample Output 22 HINT 主函数已给定如下,提交时不需要包含下述主函数 /* C代码 */ int main() { int stringlen (char *); char str[100]; int len; gets(str);

iOS开发系列--C语言之数组和字符串

概览 数组在C语言中有着特殊的地位,它有很多特性,例如它的存储是连续的,数组的名称就是数组的地址等.而在C语言中是没有String类型的,那么如果要表示一个字符串,就必须使用字符数组.今天主要就介绍如下三个方面: 一维数组 多维数组 字符串 一维数组 一维数组操作比较简单,但是需要注意,数组长度必须是固定的,长度不能使用变量进行初始化:如果声明的同时进行赋值则数组长度可以省略,编译器会自动计算数组长度:同时数组不能先声明再一次性赋值(当然可以对每个元素一一赋值). #include <stdio

Go程序设计语言3.5 字符串

3.5 字符串 字符串是不可变的字节序列,它可以包含任意数据,包括0值字节,但主要是人类可读的文本.习惯上,文本字符串被解读成按UTF-8编码的Unicode码点(文字符号)序列,稍后将细究相关内容. 内置的len函数返回字符串的字节数(并非文字符号的数目),下标访问操作s[i]则取得第i个字符,其中0i<len(s).   试图访问许可范围以外的字节会触发宕机异常:   字符串的第i个字节不一定就是第i个字符,因为非ASCII字符的UTF-8码点需要两个字节或多个字节.稍后将讨论如何使用字符.

c语言字符数组与字符串的使用详解_C 语言

1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y'};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中提供的字符个数大于数组长度,则按语法错误处理:若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 '\0' ). 2.字符数组与字符串在c语言中,将字符串作为字符数组来处理.(c++中不是)在实际应用

c-求 linux 标准 C 语言判断2个字符串的一个函数

问题描述 求 linux 标准 C 语言判断2个字符串的一个函数 函数的原型为: int diff_str(const char * a, const char * b); 主要是用来处理当A和B 中存在有符号点 "." 或星号 "*"时的判断关系. 星号出现的(位置不定),且 (不限制长度) 匹配 [a-z0-9] 中包含的字符. 注意: 星号不能匹配 "." 例如: a="hello*world"; b="hel

c语言-C语言反转字符串输出,要求使用递归算法实现。

问题描述 C语言反转字符串输出,要求使用递归算法实现. C语言反转字符串输出,要求使用递归算法实现.不用递归很简单,可是用递归怎么实现呢? 解决方案 #include <stdio.h> void foo(char * s) { if (*s != '') foo(s + 1); printf("%c", (char)*s); } int main() { char s[] = "hello world"; foo(s); } 解决方案二: #inclu

c语言-C语言用sizeof求数组长度,为什么结果不对?

问题描述 C语言用sizeof求数组长度,为什么结果不对? int aaaaa[10]; printf("%d/n",sizeof(aaaaa)); 结果是40? 解决方案 printf("%d/n",sizeof(aaaaa) / sizeof(int)); 解决方案二: sizeof求的不是数组的长度而是数据占用的空间,单位是字节

c语言关于printf输出字符串以及scanf的一些问题

问题描述 c语言关于printf输出字符串以及scanf的一些问题 代码一 #include <stdio.h> char ch1[] = {'a', 'b', 'c'}; char ch2[] = "abc"; int main(void) { printf("String ch1 is: %sn", ch1); printf("String ch2 is: %sn", ch2); return 0; } 代码二 #include