c-指针值递增究竟是如何工作的



所以我正在创建连接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。

并且变量cc2应该具有无符号类型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;
}

在所示的函数中,确实存在递增的指针psrc,并且没有使用带下标运算符的表达式。。

char *dest是一个指向char的指针,默认情况下它指向第一个字符。然后,下面的循环将指针偏移移到字符串的末尾。

c = 0;
while (dest[c])
c++;

最新更新