struct integer
{
    int len;
    char* str;
    int* arr;
}int1, int2;


int main(void) {
    printf("Please enter 1st number\n");
    int1.str= str_input();
    int1.len=chars_read-1;
    int1.arr= func2(int1.len, int1.str);
    printf(("\%c\n"), *int1.str);
    printf("Please enter 2nd number\n");
    int2.str = str_input();
    int2.len=chars_read-1;
    printf(("\n %c\n"), *int1.str );
    int2.arr= func2(int2.len, int2.str);

如果输入为4363和78596,则输出分别为4和7。
输出不是4和4。既然两者都是不同的对象,那么它们不应该有不同的内存分配吗?
请注意:这不是印刷错误。我两次都用了相同的*int1.str。问题是,虽然我没有做任何改变,但它的价值正在改变。怎么用?
我不认为str_input()会有什么不同。
char* str_input(void) {
char cur_char;
char* input_ptr = (char*)malloc(LINE_LEN * sizeof(char));
char input_string[LINE_LEN];
//while ((cur_char = getchar()) != '\n' && cur_char<='9' && cur_char>='0' && chars_read < 10000)
for(chars_read=1; chars_read<10000; chars_read++)
{
    scanf("%c", &cur_char);
    if(cur_char!='\n' && cur_char<='9' && cur_char>='0')
    {
        input_string[chars_read-1]= cur_char;
        printf("%c\n", input_string[chars_read-1]);
    }
    else{
            break;
    }
}
input_string[chars_read] = '\n';
input_ptr = &input_string[0]; /* sets pointer to address of 0th index */
return input_ptr;
}

//chars_read is a global variable.

提前谢谢。

最佳答案

您已经打印了相同的变量,*int1.str
str_input()的源代码会很有帮助,但它可能会在每个调用中返回指向同一缓冲区的指针,因此对str_input()的第二个调用也会更新int1.str的目标(因为它指向的char*int2.str相同)

09-10 19:47