c - 我的字符串传递给 C 中的指针函数时出错?
问题描述
说明:好的,我正在编写一个我正在做数字转换的代码。我提示用户给我一个基数和一个带有数学符号(例如“+”、“-”、“*”等)的位输入,然后我进行计算,如果您对此有策略,然后感觉免费给我一个想法。
问题:无论如何,我正在研究如何做到这一点的一些策略,但是我的字符、字符串、字符指针有问题。我不知道如何解决它。除了内存中的位置之外,我几乎不明白指针是什么。我需要帮助解决这个问题。
baseToDec 函数:无论如何,我有一个名为 baseToDec 的方法/函数,我在其中执行从位到小数的转换并返回一个 int。在这些参数中,我有一个 char* 接受值。例如“1001”,即值 9。
方法:但是,当我将字符串“first”放入主参数中时,我得到一个错误分段。我不知道如何声明不会收到警告或分段错误的字符串值。我尝试将变量更改为 char *first,我尝试执行地址。我不明白。我想知道我该怎么做,这样我就不会收到警告,它会顺利返回一个整数。
int baseToDec(int base, char* value)
{
int len = strlen(value);
int power = 1, result = 0,i, j, num;
if(base > 2) //not binary
{
for (i = len - 1; i >= 0; i--)
{
result += number(value[i]) * power;
power = power * base;
}
}
else if(base = 2)
{
while(value[i] == '0' || value[i] == '1' )// (2) remove the most significant binary digit(leftmost) and add it to the result.
{
if(value[i] == '1')
{
result = result * 2 + 1;
}
else if(value[i] == '0')
{
result *= 2;
}
i++;
} // (3) If all binary digits have been removed, you're done. Stop.
}
return result;
}
int main()
{
int base, i = 0, j =0, dec; // dec is declared here.
char input[100], first[100], second[100];
char option;
instructions();
scanf("%s", &option);
while(option != 'q')
{
i = 0;
printf("Base: ");
scanf("%d", &base);
printf("Input: ");
scanf("%s", input);
while(input[i] != '+' && input[i] != '-' && input[i] != '*' && input[i] != '/')
{
i++;
}
printf("%d", i);
if(input[i] == '+')
{
for(j = 0; j < i; j++)
{
first[j] = input[j];
}
first[i] = 0;
dec = baseToDec(base, first); // Error takes place here.
}
}
我知道写了很多,但我列出了错误发生的位置和我通过的方法。
解决方案
这是错误的:
scanf("%s", &option);
当您使用 时%s
,您必须提供一个指向可以保存整个输入的字符串的指针。option
是一个char
,而不是一个字符串。它只有一个字符的空间,但%s
写入输入单词后跟一个空终止符。
使用%c
format 读取单个字符。
scanf(" %c", &option);
还,
if (base = 2)
应该
if (base == 2)
但是没有必要将二进制与任何其他基础区别对待,转换过程是相同的。
推荐阅读
- reactjs - 使用 reactJS 创建动态输入字段和使用过滤器映射 db 列的最佳方法是什么?
- node.js - 无法将离子与电容器集成,npm 抛出错误
- javascript - Formik onChange 不适用于输入类型“复选框”
- java - 如何从应用程序外部更改 JavaFX 应用程序的内容
- flutter - 错误:输入'_InternalLinkedHashMap
' 不是类型 'Ad1' 的子类型 - excel - 使用索引和索引分组将变量数据集与 Power Pivot 相结合。返回无效的单元格数据#VALUE
- javascript - 在渲染或设置状态之前按摩数据的正确位置是什么?
- java - 使用相机 x android 减小视频文件大小
- php - 如何在 Laravel 中获取特定月份和年份的第一天?
- http - 使用代理的 http 自定义 ip 查找