应该使用指向未知大小字符数组的指针。这是每个人都应该做的,但据我所知没有人这样做:
void str_cpy(char (*s)[], char (*t)[]) {{
char *str_cpy[2] = { *s, *t }, *s = *str_cpy, *t = str_cpy[1];
{
void str_cpy(char (*s)[], char (*t)[]);
while ( (*s = *t) != '\0') s++, t++;
}
}}
请注意,对于未知大小的数组指针进行递增是被禁止的,而且在这里也不是期望的操作,因此需要更改函数代码(就像我上面所做的那样)。
然后,您可以像这样传递字符串:
char str[20], str1[20];
strcpy(&str, &str1);
这样你就可以诊断意外地将指针传递给单个字符:
char singleChar = 'H';
strcpy(&singleChar, &singleChar); //warning
生活例子。
然而,问题在于使用char *
变量是访问任何“char数组”中的每个单独char
最实用的方法,因为您可以直接增加这样的变量以使其引用下一个数组元素(使用指向数组的指针无法做到这一点-增加这样的指针将使其引用内存中的下一个数组而不是所指数组的下一个字符)。此外,使用指向数组的指针的语法更加复杂。
s
和t
实际上是指向单个字符的指针。它们不是指向字符串的指针,因为C语言没有字符串。是的,如果您恰好在内存中有以0结尾的一系列字符,我们可以对它们执行某些类似于字符串的操作。 - Lee Daniel Crocker