【发布时间】:2016-03-21 13:00:37
【问题描述】:
我遇到了一个问题,当我使用 scanf 将字符串存储到 char 指针中时,我有 3 个输入 - 姓名、姓氏和年龄,姓氏的最后一个 char 值被年龄替换这里是输出更好地解释。
Q-riosity v0.0.1
输入您的姓名
叶夫根尼
输入您的姓氏
丹尼连科
输入您的年龄
22
Evgeny Danilenk22,你 22 岁
这是代码
void getUserDetails(char** value)
{
char *key[3] = {"name", "surname", "age"};
int keySize = sizeof(key)/sizeof(char*);
printf("Q-riosity v0.0.1\n");
int i = 0;
for(i = 0; i<keySize; i++)
{
printf("Enter your %s \n", key[i]); // name, surname, age
scanf("%s", &value[i]); //stores value at index i
}
printf("%s, %s, you are %s years old\n", &value[0], &value[1], &value[2]);
}
编辑
输入你的名字
叶夫根尼
输入您的姓氏
丹尼连科
输入您的年龄
22
分段错误
int main(int argc, char* argv[])
{
char *key[3] = {"name", "surname", "age"};
int keySize = sizeof(key)/sizeof(char*);
printf("Q-riosity v0.0.1\n");
char* value[keySize];
int i = 0;
for(i = 0; i<keySize; i++)
{
printf("Enter your %s \n", key[i]);
scanf("%s", value[i]);
}
for(i = 0; i<keySize; i++)
{
printf("%s : %s \n", key[i], value[i]);
}
return 0;
}
【问题讨论】:
-
从最后一个
printf中删除所有& -
价值声明在哪里?你为此分配了多少内存?
-
Nadir,如果我这样做,会出现分段错误
-
char* value[keySize];是一个由 3 个指针组成的数组,指向谁知道什么。scanf("%s", value[i]);肯定会失败。需要分配/定义空间来保存输入。