char *foo(char *dest, const char *src) {
size_t i;
for (i = 0; dest[i] != '\0'; i++);
在这里,我正在迭代以获得dest的大小。 在这种情况下,我将“hello”输入到dest中,其大小为6.当我尝试使用sizeof(dest)时,我得到4作为返回值。我希望能够在不使用for循环的情况下获取dest内部的内容大小。
char *foo(char *dest, const char *src) {
while (*dest != '\0') dest++; /* increment the length of dest's pointer*/
EDIT :: 我想花点时间表明我能够直接找到长度。
这是strcat程序的一部分。要求是不使用[]括号来访问或在内存中移动。
char *strcat(char *dest, const char *src) {
while (*dest != '\0') dest++; /* increment the length of dest's pointer*/
while (*src != '\0') /* we will be incrementing up through src*/
*dest++ = *src++; /* while this is happening we are appending
* letter by letter onto the variable dest
*/
*(dest++) = ' '; /* increment up one in memory and add a space */
*(dest++) = '\0'; /* increment up one in memory and add a null
* termination at the end of our variable dest
*/
return dest; /* return the final output */
}
答案 0 :(得分:6)
对于以null结尾的字符串,您必须迭代每个字符以计算长度。即使你使用strlen(),它也会做你的循环。
答案 1 :(得分:0)
您正在寻找strlen()
。但请注意,它可能使用相同的循环实现。
答案 2 :(得分:0)
由于您的函数dest
的类型为char const*
,sizeof(dest)
与sizeof(char const*)
相同,即指针的大小。使用sizeof(dest)
时获得4的事实表明平台中指针的sizeof
为4。
获取字符串长度的唯一方法是计算字符,直到遇到空字符。这很可能也是strlen
所做的。
答案 3 :(得分:0)
在C中,字符串存储为以\0
结尾的字符数组。
如果你想获得一个数组中的字符数,你必须遍历这个数组,你无法绕过它。
但是,您可以将大小存储在结构中,
typedef struct
{
int size;
char *data;
}String;
然后,您必须创建包装函数以写入此String
,从此String
读取,并更新数据。
如果您有大量的读取大小且没有多少更新或写入(或常量为零写入),这将非常有用。
但通常情况下,for循环是更好的解决方案。
答案 4 :(得分:-1)
耶!!你可以在不使用for循环的情况下获得大小介绍图书馆和 strlen(dest)+1将是你的array.cout<<的大小DEST;肯定会给你的数组,但sizeof(dest)不会给出数组的大小。我也很困惑为什么会这样。