#include <stdio.h>
int main ()
{
char *ptr = "stackoverflow"
}
有没有办法找到ptr指向的stackoverflow的长度,因为sizeof ptr总是给出4
答案 0 :(得分:38)
使用strlen查找字符串的长度(字符数)
const char *ptr = "stackoverflow"
size_t length = strlen(ptr);
另一个小问题,请注意ptr
是一个字符串文字(指向const内存的指针,无法修改)。将它声明为const以表明这一点的更好的做法。
答案 1 :(得分:13)
sizeof()
返回类型所需的大小。由于在这种情况下传递给sizeof的类型是指针,因此它将返回指针的大小。
如果您需要指针指向的数据大小,则必须按storing it explicitly记住它。
sizeof()
在编译时工作。因此,sizeof(ptr)
通常会return 4 or 8 bytes
。而是使用strlen
。
答案 2 :(得分:5)
string.h
提供的strlen()
函数可以显示参数指向的字符串包含多少“真实字符”。但是,此长度不包括终止空字符'\0'
;如果你需要长度来分配内存,你必须考虑它。
这4个字节是平台上指向char的指针的大小。
答案 3 :(得分:1)
您正在寻找strlen()
功能。
答案 4 :(得分:1)
您可以尝试使用:
char *ptr = "stackoverflow"
size_t len = strlen(ptr);
答案 5 :(得分:1)
#include<stdio.h>
main()
{
int mystrlen(char *);
char str[100];
char *p;
p=str;
printf("Enter the string..?\n");
scanf("%s",p);
int x=mystrlen(p);
printf("Length of string is=%d\n",x);
}
int mystrlen(char *p)
{
int c=0;
while(*p!='\0')
{
c++;
*p++;
}
return(c);
}
易于理解的简单代码
答案 6 :(得分:0)
如果ptr length是函数的参数,则将指针用作字符串是合理的。我们可以通过以下代码获得字符串长度:
char *ptr = "stackoverflow";
length=strlen((const char *)ptr);
有关更多解释,如果string是具有可变长度的用户的输入字符串,我们可以使用以下代码:
unsigned char *ptr;
ptr=(unsigned char *)calloc(50, sizeof(unsigned char));
scanf("%s",ptr );
length=strlen((const char *)ptr);
答案 7 :(得分:0)
纯粹使用指针,你可以使用指针算法:
int strLen(char *s)
{
int *p = s;
while(*p !=’\0’)
{
p++; /* increase the address until the end */
}
Return p – s; /* Subtract the two addresses, end - start */
}
答案 8 :(得分:0)
即使这是一个通用的C问题,但在针对C ++查找此问题时,它的命中率也很高。我不仅在C / C ++领域,而且还必须考虑到Microsoft的Security Development Lifecycle (SDL) Banned Function Calls特定项目,该项目使strlen
变得不可行,
对于关键应用程序,例如那些接受匿名Internet连接的应用程序,
strlen
也必须替换 ...
无论如何,这个答案基本上只是其他答案的一个转折,但具有经过批准的Microsoft C ++替代函数调用以及对65535字节的C99's updated limit进行宽字符处理的注意事项。
#include <iostream>
#include <Windows.h>
int wmain()
{
// 1 byte per char, 65535 byte limit per C99 updated standard
// https://stackoverflow.com/a/5351964/3543437
const size_t ASCII_ARRAY_SAFE_SIZE_LIMIT = 65535;
// Theoretical UTF-8 upper byte limit of 6; can typically use 16383 for 4 bytes per char instead:
// https://stijndewitt.com/2014/08/09/max-bytes-in-a-utf-8-char/
const size_t UNICODE_ARRAY_SAFE_SIZE_LIMIT = 10922;
char ascii_array[] = "ACSCII stuff like ABCD1234.";
wchar_t unicode_array[] = L"Unicode stuff like → ∞ ∑ Σὲ γνωρίζω τὴν ደሀ ᚦᚫᛏ.";
char * ascii_array_ptr = &ascii_array[0];
wchar_t * unicode_array_ptr = &unicode_array[0];
std::cout << "The string length of the char array is: " << strnlen_s(ascii_array_ptr, ASCII_ARRAY_SAFE_SIZE_LIMIT) << std::endl;
std::wcout << L"The string length of the wchar_t array is: " << wcsnlen_s(unicode_array_ptr, UNICODE_ARRAY_SAFE_SIZE_LIMIT) << std::endl;
return 0;
}
输出:
The string length of the char array is: 27
The string length of the wchar_t array is: 47