我对 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/