所以我正在创建连接c中字符串的原始函数。提供给我的一个解决方案是:
char *_strcat(char *dest, char *src)
{
int c, c2;
c = 0;
while (dest[c])
c++;
for (c2 = 0; src[c2] ; c2++)
dest[c++] = src[c2];
return (dest);
}
让我困惑的部分是while (dest[c])
和其他类似的部分。我已经浏览了各种资源中的指针,但我似乎无法理解这一部分。一个好的解释将不胜感激。
对于初学者来说,函数是不正确的。它不构建串联字符串,因为它没有将终止零字符' '
附加到循环中的结果(dest
(字符串
for (c2 = 0; src[c2] ; c2++)
dest[c++] = src[c2];
此外,函数应该像一样声明
char * _strcat( char *dest, const char *src );
因为附加的字符串(src
(没有改变。
此while loop
while (dest[c])
c++;
相当于
while (dest[c] != ' ' )
c++;
这是环路
for (c2 = 0; src[c2] ; c2++)
dest[c++] = src[c2];
相当于
for (c2 = 0; src[c2] != ' ' ; c2++)
dest[c++] = src[c2];
也就是说,循环继续它们的迭代,直到在字符串dest
的while循环中遇到终止零字符"\0"(找到它的结尾(,并在字符串src
的第二个循环中找到它的末尾。。
非零标量表达式在条件中被计算为逻辑true。
并且变量c
和c2
应该具有无符号类型size_t
而不是类型int
,因为类型int
的对象可能不足以存储字符串长度。
此外,您不应该定义以下划线字符开头的名称。
关于你的问题
指针值递增究竟是如何工作的?
则指针本身不会递增。使用带有下标运算符的表达式来访问字符串的元素,例如dest[c]
、dest[c++]
或src[c2]
。
该功能可以通过以下方式定义
char * my_strcat( char *dest, const char *src )
{
char *p = dest;
while ( *p != ' ' ) ++p;
while ( ( *p++ = *src++ ) != ' ' );
return dest;
}
在所示的函数中,确实存在递增的指针p
和src
,并且没有使用带下标运算符的表达式。。
char *dest
是一个指向char的指针,默认情况下它指向第一个字符。然后,下面的循环将指针偏移移到字符串的末尾。
c = 0;
while (dest[c])
c++;