如果字符串声明为const char * str,我该如何确定字符串的长度?

时间:2014-10-25 19:44:24

标签: c string pointers

我有以下功能结构

int function(const char *str)
{
    return 0;
}

我永远无法完全理解为什么人们使用char *str而不仅仅是string str。所以我猜这基本上意味着参数是指向字符串第一个字符的指针。如何根据该参数确定字符串str的长度?

我尝试的是迭代str,如果我点击NULL""'',那么这将是它的结束。但是,这些类型都不兼容进行比较。请给我一些关于此的线索。 THX!

3 个答案:

答案 0 :(得分:4)

Jamesdlin的回答很好,但要回答关于比较的问题,你可以使用'\0',IE:

char* a = "a";
int size = 0;
while (a[size] != '\0')
    size++;

NULL是一个指针宏,""是一个空字符数组(虽然它有一个隐式'\0',所以你理论上可以做strcmp(a, "");)和{{ 1}}只是一个空洞的角色,我不确定它是否是一个有效的陈述。

此外,''是C ++类,在C标准库中不存在。

答案 1 :(得分:3)

在C中,字符串通常以NUL终止。对于以NUL结尾的字符串,您只需拨打strlen(str)

即可
  

我永远无法完全理解为什么人们使用char * str而不是简单地使用字符串str。

C中没有string类型。您可以添加typedef

typedef char* string;

但是为指针类型添加typedef通常是一个坏主意(因为现在您需要typedef const char*; const string 是同一件事。)

虽然这样做似乎是一个好主意,但实际上它会模糊您的代码,因为char* / const char*字符串是常态。

答案 2 :(得分:0)

您几乎是正确的,char *str是指向char数组的第一个字符的指针,但C没有预定义的字符串类型 - 它只是一个以零结尾的char数组。不要试图编写一个函数(虽然这将是一个很好的学生练习),只需在<string.h>中使用strlen (str);调用库函数,该函数将获取指向字符数组的指针。如果它是声明的数组变量,则不会传递*str&str,而只传递str。如果动态分配了内存,则传递已分配的指针,因此如果指针被声明为char *memstr,则将其作为memstr传递。正如其他人所说,最好不要尝试定义字符串,更好地理解char数组的工作原理。