字符串函数和指针——初学C语言的浪荡第一学期

2024-02-11 11:32

本文主要是介绍字符串函数和指针——初学C语言的浪荡第一学期,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天遇到的第三个疑惑
字符串函数和指针的知识点考察

Question

下面程序段的运行结果是( C )。
char *p= “abcdefgh”;
p+=2;
printf("%d\n", strlen(strcpy(p, “ABCD”)));
A) 6
B) 12
C) 4
D) 7

Thinking
这个题考察的是<string.h>库函数的功能
(字符串函数)
于是我又去复习了一下知识点:

  1. strlen(s) 获得字符串的长度,而且不含\0(比如strlen(“abcd\0\0\0”),结果为4
    {这个要和sizeof区分开来
    因为sizeof要统计字符个数和字符串隐藏的\0
    比如sizeof(“abed\0fg”)的值是8,sizeof(1234\056)的值是6[这个\056是转义字符噢]}
  2. **strcmp(s1,s2)**比较字符串[比如strcmp(“ab”,“ac”),结果为-1]
    字符串比较会先转化成ASCII码
    结果:
    1→s1比s2的ASCll码大
    0→相等
    -1→小
  3. **strcpy(s1,s2)**字符串拷贝,关键是拷贝之后覆盖原来字符串且不能对字符串常量进行拷贝
  4. **strcat(s1,s2)**把字符串s2拼接到s1后面,关键是s1与s2指的内存空间不能重叠,且s1要有足够的空间来容纳要复制的字符串
  5. **atoi(s1)**把字符串转化为整数,如atoi(“100”),结果:100

那么本题很明显考的是对strcpy和strlen的理解,我也立刻想到了“覆盖”这一个关键词,不过我想的是,ABCD拷贝到p指向的地点,难道不是小写字母c以及之后的所有内容吗?为什么结果不是"abABCD",然后选A呢?这是困惑我的地方。

Solution
于是我写了这个程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{char *p= "abcdefgh";p+=2;printf("%d\n", strlen(p));return 0;
}

运行结果为:6
也就是说,strlen就是从c开始往后算的,那么问题就迎刃而解啦!

Extra harvest
其实这个过程中遇到了另一个问题,我最开始写的strlen(*p)…发现运行没有结果,之后窗口就自动关闭了。我查了一下为什么要写strlen( p ) 而不是前者,原因如下:
int strlen(const char *str)
{
assert(str != NULL);
int len = 0;
while((*str++) != ‘/0’)
len++;
return len;
}

这篇关于字符串函数和指针——初学C语言的浪荡第一学期的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/699668

相关文章

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null