gpt4 book ai didi

c - 当我在增加指针后使用 strlen() 时会发生什么?

转载 作者:行者123 更新时间:2023-11-30 20:44:44 25 4
gpt4 key购买 nike

我对 strlen() 做了一些研究并有一个问题。

假设我有一个数组 50元素和指向第一个元素的指针,含义:

char A[50],*x;
gets(A);
x=&A[0];

据我了解,strlen(x)应该给我字符串的长度。

我的问题是,当我增加 x 时到底会发生什么?

最佳答案

首先,很抱歉离题了,但是请永远不要使用过时的 gets() 函数。请改用fgets

在回答您的问题时,如果x是指向有效非空字符串的指针,则strlen(x+1)将始终等于strlen(x) - 1.

假设我们有这个字符串,x 指向它:

     +---+---+---+---+---+---+
a: | H | e | l | l | o | \0|
+---+---+---+---+---+---+
^
|
+---|---+
x: | * |
+-------+

x指向字符串的第一个字符。现在,strlen 所做的只是从指向的字符开始并对字符进行计数,直到找到终止的 '\0'

因此,如果我们递增x,现在它会指向'e'(即,它指向字符串“ello”),如下所示:

     +---+---+---+---+---+---+
a: | H | e | l | l | o | \0|
+---+---+---+---+---+---+
^
|
/
/
/
|
+---|---+
x: | * |
+-------+

因此 strlen 的长度将减少 1。

<小时/>

脚注:我想起了我不止一次遇到的一个有趣的错误。当您使用malloc为字符串分配空间时,您始终必须记住为终止'\0'添加空间。只是不要这样做:

char *p = malloc(strlen(str + 1));

我的同事曾经这样做过一次(不,真的,那是一个同事,不是我!),并且很难追踪,因为很容易看到有错误的代码而看不到它事实并非如此

char *p = malloc(strlen(str) + 1);

本来应该如此。

关于c - 当我在增加指针后使用 strlen() 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49470139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com