指向字符串的指针中的“ strlen()”

时间:2018-09-20 16:01:31

标签: c string pointers strlen

我应该使用哪种方法来获取使用指针声明的字符串的长度? 因为据我所知,char *只是定义了一个指向字符串第一个元素的指针,所以strlen()没用。

找到下面的代码。

char *c_exp = "1";
char expressions[2] = {'+', '-'};
int now = 0;

for (; now < 3; now++)
    {
        if (now == 0)
        {
            c_exp[strlen(c_exp)] = expressions[0];
            c_exp[strlen(c_exp)] = '\0';

            c_exp[strlen(c_exp)] = ((c_exp[strlen(c_exp) - 2]) + 1);
            c_exp[strlen(c_exp)] = '\0';

            now++;
        }

然后,gcc编译器在c_exp[strlen(c_exp)] = expressions[0];行给出分段错误。

1 个答案:

答案 0 :(得分:1)

  

有什么想法可以获取使用char *方法声明的字符串的字符串长度?

是的,很简单

char* p = "Some text";
size_t len = strlen(p);

您的代码存在其他问题。

示例:

c_exp[strlen(c_exp)] = expressions[0];

在这里,您尝试更改c_exp指向的字符串中的char。由于c_exp指向非法的字符串文字。  为了使其合法,您应该这样做:

char c_exp[] = "1";

代替使用指针。但是,即使在这种情况下,也很奇怪,因为您将用expressions[0]覆盖字符串终止符,即c_exp将不再是字符串。因此,当您这样做时:

c_exp[strlen(c_exp)] = '\0';
      ^^^^^^^^^^^^^

通过在非字符串的内容上使用strlen,再次执行非法操作。

顺便说一句:此代码

   c_exp[strlen(c_exp)] = '\0';

真的什么也没做!如果c_exp是字符串,则索引strlen(c_exp)处的元素已经具有值'\0',因此赋值根本不会改变任何东西。