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
相同)