c - 我的字符串传递到 C 中的指针函数时出错?

标签 c string pointers char

说明:好吧,我正在编写一个进行数字转换的代码。我提示用户给我一个基数和带有数学符号(例如“+”、“-”、“*”等)的位输入,然后我进行计算,如果您对此有策略,那么感觉有空给我一个主意。

问题:无论如何,我正在制定一些关于如何做到这一点的策略,但我在字符、字符串、字符指针方面遇到了问题。我不知道如何解决。除了内存中的位置之外,我几乎不明白指针是什么。我需要帮助来解决这个问题。

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格式读取单个字符。

scanf(" %c", &option);

另外,

if (base = 2)

应该是

if (base == 2)

但是没有必要将二进制与任何其他基数区别对待,转换过程是相同的。

关于c - 我的字符串传递到 C 中的指针函数时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58635759/

相关文章:

c++ - 有人在处理 2038 time_t 错误吗?

c# - 分隔字符串并将其放入列表框中

Python翻译多个字符

c - 通过字符串的结构引用

pointers - 分配 block 指针: differences between Objective-C vs C++ classes

c++ - 如果指针是一个函数 arguemente 并且正在通过引用传递值,我应该删除它吗?

c++ - GDB 与 C++ 调用 C 代码

c++ - 如何渲染多个纹理?

c - 使用 -O 标志编译时套接字代码失败

c++ - 从字符串中删除两个字符以获得唯一字符的可能性