【问题标题】:How to find the size of a string inside a function in C? [duplicate]如何在C中的函数中查找字符串的大小? [复制]
【发布时间】:2016-04-08 06:46:50
【问题描述】:

首先在我解释之前,这是C中的代码:

#include <stdio.h>

void printSize(char* str);

int main()
{
    char a[100] = "StackOverflow";
    printSize(a);
    return 0;
}

void printSize(char* str)
{
    int n = sizeof(str) / sizeof(char);
    printf("%d" ,n);
}

正如您已经看到的,我试图让我的函数打印值“100”,因为 100 是我分配给我的 char 数组 a 的大小。但是我得到 8 作为我的答案。现在我知道为什么我在这里得到 8 因为它正在打印指针的大小。所以我的问题是,如果我不能使用这种方法打印出“100”的值,那么我如何从函数内部找出分配给a的内存?

谢谢

【问题讨论】:

  • 用简单的方法是找不到的。通常所做的就是在函数中添加另一个参数int size,它告诉你数组的大小。
  • 那么在C中基本上没有办法做到吗?

标签: c function sizeof


【解决方案1】:

要获取字符串的长度,请使用strlen 函数。要获取 数组 的大小,您需要将其作为参数传递。

当你得到一个指针的大小时,你得到的是实际指针的大小,而不是它所指向的大小。在您的情况下,您似乎在一个 64 位平台上,其中指针为 64 位(8 个字节),然后将其除以 sizeof(char)(定义为始终为 1),您将得到值 8

【讨论】:

  • #include &lt;string.h&gt;strlen()
  • 是的,我知道 strlen 以及为什么我一直得到 8 作为输出的原因,但是无论如何要让它工作而不在我的函数中添加第三个参数并且也不添加额外的 int 字节在我分配的内存中存储大小?
  • @rohitkrishna094 不,没有办法。一旦数组衰减为指针,您所拥有的只是指针,并且您丢失了编译器可能拥有的数组的所有语义信息。
  • 哦,好的。感谢您的帮助。
猜你喜欢
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
相关资源
最近更新 更多