如何在不使用for循环的情况下获取char *变量的大小?

时间:2016-02-05 05:22:37

标签: c pointers char sizeof

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 */
}

5 个答案:

答案 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)不会给出数组的大小。我也很困惑为什么会这样。