将字列转换为整数的 C 程序

标签 c arrays gcc segmentation-fault

我正在用 c 编写一个程序来计算单词列的整数值。

#include<stdio.h>
#include<math.h>

int GetValue(char ch){
        int c=ch;
        if(ch>='a'&&ch<='z'){
                return abs(96-c);
        } 
        if(ch>='A'&&ch<='Z'){
                return abs(64-c);
        }
        return -1;
}

void main()
{
        char col[10];
        char *str;
        int len,sum=0,temp=0,i;
        printf("Enter the column string : ");
        scanf("%s",&col);
        len = strlen(col);
        memcpy(str,col,len);
        str[len]='\0';
        printf("Entered characters are %s and its length is %i",col,len);

        for(i=0;i<len;i++){
                sum+=GetValue(str[i])*(pow(26,len-1-(temp++)));
        }

        printf("Value of column is %d",sum);
}

当我编译它时,它给出了 3 个警告

columnno.c:20:2:警告:格式“%s”需要“char ”类型的参数,但参数 2 的类型为“char ()[10]”[-Wformat= ] scanf("%s",&col); ^

columnno.c:21:8:警告:内置函数“strlen”的隐式声明不兼容[默认启用] len = strlen(列); ^

columnno.c:22:2:警告:内置函数“memcpy”的不兼容隐式声明[默认启用] memcpy(str,col,len); ^

输出

输入列字符串:abc

段错误(核心转储)

请帮忙!!!

最佳答案

1. 无需使用 %s 将数组地址传递给 scanf()

scanf("%s",&col);

更改为

scanf("%s",col);

2. 在执行 memcpy(str,col,len); 之前,您应该将内存分配给 str 作为其 char *。否则,您将访问 str 中的随机值作为内存位置,从而导致未定义的行为 - 最有可能是段错误。

所以最好使用strdup()

改变

memcpy(str,col,len);
str[len]='\0';

str = strdup(col);

但是,请确保您的输入字符串不超过 9 个字符,以便将其正确存储在 cols 中。

关于将字列转换为整数的 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32064205/

相关文章:

c - 在此 GTK 应用程序中如何创建窗口?

c - GDB 是否检查命令反向字节?

c - 线程中的私有(private)变量

c++ - 尝试创建指针数组时不允许使用不完整的类型

c - 我的程序在 gnu-gcc 上运行良好,但在 gnu gcc for avr 上运行不佳

c - 很好地理解流,以及它们如何与程序交互

ruby - 比较二维数组

c++ - 在二维数组的每一行中查找具有 1 个元素的所有可能组合

c++ - 获取临时地址 - 需要解决方法

c - 使用 union 内的位域来寻址 32 位 `int` 是否是明确定义的行为?