我正在尝试增加C字符数组中的值,并且它会一直失败 - 帮助?

ryb*_*ome 0 c

这是我的函数代码:

char * increment_b_string(char * b_string)
{
    char * ret_string = (char *) malloc(7);

    ret_string = "001aaa";

    if (*(b_string + 2) == '9')
    {
        *(ret_string +2) == '0';

        if (*(b_string + 1) == '9')
        {
            *(ret_string +1) = '0';
            *(ret_string) = *(b_string) + 1;
        } else {
            *(ret_string + 1) = *(b_string + 1) + 1;
        }
    } else {
        *(ret_string + 2) = *(b_string + 2) + 1;
    }

    return ret_string;
}
Run Code Online (Sandbox Code Playgroud)

有关它为什么会失败的任何想法?

一般的想法是b_string将包含类似"123aaa"的值."aaa"部分并不重要,永远不会改变.只有前3个数字会.它们需要增加,就好像它们是整数一样.需要在开始时保留前导零.因此,如果输入为"004aaa",则输出应为"005aaa".这只需要达到"300aaa",因此我不会考虑更多的东西.这是一个学校的编程任务,因此问题非常人为.

谢谢.

编辑:我改变了我的功能.这就是现在的情况.

void increment_b_string(char * b_string)
{   
    if (b_string[2] == '9')
    {
        b_string[2] == '0';

        if (b_string[1] == '9')
        {
            b_string[1] = '0';
            b_string[0] += 1;
        } else {
            b_string[1] += 1;
        }
    } else {
        b_string[2] += 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

假设b_string最初填充了...

strcpy(b_string,"001aaa");

这会是正确的吗?我的程序仍然表现出相同的行为,但这可能是代码中其他地方的错误.

nos*_*nos 14

您不能增加或更改字符串文字 - 它们只能在C中读取,这就是您正在做的事情.

char * ret_string = (char *) malloc(7);
ret_string = "001aaa";
Run Code Online (Sandbox Code Playgroud)

不执行您认为它做的事情,它不会将字符串复制到malloced空间ret_string中,它将ret_string设置为指向字符串文字"001aaa".请改用:

 char * ret_string = (char *) malloc(7);
 strcpy(ret_string,"001aaa");
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用strdup,而不是使用单独的malloc和strcpy.例如`char*ret_string = strdup("001aaa");` (2认同)