如何将指针传递给局部变量?
How do I pass a pointer to a local variable?
我在传递指向局部变量的指针时遇到了一些问题。当我尝试在 main()
中打印 printf
语句时,我每次都会得到随机数。但是当我从解析函数打印它时,它工作正常。我试过玩弄指针,但无法弄清楚。
#include <stdio.h>
#include <stdlib.h>
void parse(char record[], int *acct, float *amnt){
char word1[10], word2[10];
sscanf(record, "%s %s", word1, word2);
acct = (int*) malloc(10);
amnt = (float*) malloc(10);
*acct = atoi(word1);
*amnt = atof(word2);
printf("%d, %.1f\n", *acct, *amnt);
}
int main(){
FILE *p = fopen("accounts.ssv", "rt");
char record[20];
int acct;
float amnt;
while (fgets(record, 20, p)){
parse(record, &acct, &amnt);
printf("%d, %.1f\n", acct, amnt);
}
fclose(p);
return 0;
}
accounts.ssv
20 -50.5
10 60.5
20 30.0
您正在传递指向 main() 的 acct
和 amnt
的指针,但是 malloc
调用正在将这些指针替换为指向新分配的内存的指针。
这些行:
*acct = atoi(word1);
*amnt = atof(word2);
写入新分配的内存而不是 main() 中的变量。
尝试删除两个 malloc
调用,atoi
/atof
函数会将其结果存储在 main() 变量中。
我在传递指向局部变量的指针时遇到了一些问题。当我尝试在 main()
中打印 printf
语句时,我每次都会得到随机数。但是当我从解析函数打印它时,它工作正常。我试过玩弄指针,但无法弄清楚。
#include <stdio.h>
#include <stdlib.h>
void parse(char record[], int *acct, float *amnt){
char word1[10], word2[10];
sscanf(record, "%s %s", word1, word2);
acct = (int*) malloc(10);
amnt = (float*) malloc(10);
*acct = atoi(word1);
*amnt = atof(word2);
printf("%d, %.1f\n", *acct, *amnt);
}
int main(){
FILE *p = fopen("accounts.ssv", "rt");
char record[20];
int acct;
float amnt;
while (fgets(record, 20, p)){
parse(record, &acct, &amnt);
printf("%d, %.1f\n", acct, amnt);
}
fclose(p);
return 0;
}
accounts.ssv
20 -50.5
10 60.5
20 30.0
您正在传递指向 main() 的 acct
和 amnt
的指针,但是 malloc
调用正在将这些指针替换为指向新分配的内存的指针。
这些行:
*acct = atoi(word1);
*amnt = atof(word2);
写入新分配的内存而不是 main() 中的变量。
尝试删除两个 malloc
调用,atoi
/atof
函数会将其结果存储在 main() 变量中。