Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的字符串传入C中的指针函数时出错?_C_String_Pointers_Char - Fatal编程技术网

我的字符串传入C中的指针函数时出错?

我的字符串传入C中的指针函数时出错?,c,string,pointers,char,C,String,Pointers,Char,说明:好的,我正在编写一个代码,在其中我正在进行数字转换。我正在提示用户给我一个基数和一个带有数学符号的位输入,比如“+”、“-”、“*”等,然后我进行计算,如果你有这样的策略,请随时给我一个想法 问题:不管怎样,我正在制定一些策略来解决这个问题,但是我的字符、字符串和字符指针有问题。我不知道如何解决它。除了内存中的位置之外,我几乎不知道指针是什么。我需要帮助解决这个问题 baseToDec函数:无论如何,我有一个名为baseToDec的方法/函数,在这里我执行从位到十进制的转换,并返回一个in

说明:好的,我正在编写一个代码,在其中我正在进行数字转换。我正在提示用户给我一个基数和一个带有数学符号的位输入,比如“+”、“-”、“*”等,然后我进行计算,如果你有这样的策略,请随时给我一个想法

问题:不管怎样,我正在制定一些策略来解决这个问题,但是我的字符、字符串和字符指针有问题。我不知道如何解决它。除了内存中的位置之外,我几乎不知道指针是什么。我需要帮助解决这个问题

baseToDec函数:无论如何,我有一个名为baseToDec的方法/函数,在这里我执行从位到十进制的转换,并返回一个int。在这些参数中,我有一个char*,它接受值。例如值为9的“1001”

方法:然而,当我在main中的参数中输入字符串“first”时,我得到了一个错误分段。我不知道如何声明该字符串值,因为我不会得到警告或分段错误。我尝试将变量更改为char*首先,我尝试执行地址。我不明白。我想知道我如何才能做到这一点,这样我就不会收到警告,它会平稳地返回一个整数

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. 
    }
}
intbasetodec(intbase,char*value)
{
int len=strlen(值);
整数幂=1,结果=0,i,j,num;
if(base>2)//非二进制
{
对于(i=len-1;i>=0;i--)
{
结果+=数字(值[i])*功率;
功率=功率*基数;
}
}
否则,如果(基数=2)
{
while(value[i]='0'| | value[i]=='1')/(2)删除最重要的二进制数字(最左边的)并将其添加到结果中。
{
如果(值[i]=“1”)
{
结果=结果*2+1;
}
else if(值[i]=“0”)
{
结果*=2;
}
i++;
}//(3)如果已删除所有二进制数字,则完成。停止。
}
返回结果;
}
int main()
{       
int base,i=0,j=0,dec;//这里声明dec。
字符输入[100],第一[100],第二[100];
字符选项;
指令();
scanf(“%s”,选项(&O);
while(选项!=“q”)
{ 
i=0;
printf(“基:”);
scanf(“%d”、&base);
printf(“输入:”);
扫描频率(“%s”,输入);
while(输入[i]!='+'&&input[i]!='-'&&input[i]!='*'&&input[i]!='/'))
{       
i++;
}
printf(“%d”,i);
如果(输入[i]=='+')
{       
对于(j=0;j
我知道要写很多东西,但我列出了错误发生的地方和我通过的方法。

这是错误的:

scanf("%s", &option);
使用
%s
时,必须提供一个指向可容纳整个输入的字符串的指针。
选项
是一个
字符
,而不是字符串。它只能容纳单个字符,但
%s
写入输入字,后跟一个空终止符

使用
%c
格式读取单个字符

scanf(" %c", &option);
而且

应该是

if (base == 2)

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

解决问题的第一步是隔离问题。这通常意味着创建一个单独的项目,只使用相关代码来重现问题。如果仍然有问题,则可以在发布最小releva时提问nt代码。@Nina我会尽量减少代码then@Nina但是,其他人在查看时可能很难追溯到某些变量。如果
while
循环到达
input
结尾时没有看到其中一个操作字符,它不会停止。@Barmar它会停止,因为如果用户输入“+”或“t”,它会停止这些数学符号。我看到了,但是这并没有解决我的问题,我已经…我做了这个更改,但它没有解决问题。
printf(“%s\n”,first);
是否显示了您的期望值?是的,我在我的原始代码上有这个,它具有假定的内容您从未为
base
分配任何值。
if (base == 2)