我应该使用哪种方法来获取使用指针声明的字符串的长度? 因为据我所知,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];
行给出分段错误。
答案 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'
,因此赋值根本不会改变任何东西。