【问题标题】:C Program to convert word columns into integerC程序将单词列转换为整数
【发布时间】:2015-08-18 05:30:35
【问题描述】:

我正在用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(col); ^

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

输出

输入列字符串:abc

分段错误(核心转储)

请帮忙!!!

【问题讨论】:

  • 除了 Rohan 的回答之外,您还可以使用 malloc 为指针提供内存。

标签: c arrays gcc segmentation-fault


【解决方案1】:

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 中。

【讨论】:

  • 添加string.h头文件
【解决方案2】:

添加到上述答案。包含strlen()的库头文件

#include<string.h>

包含函数strlen()的定义

【讨论】:

    【解决方案3】:

    您收到这些警告是因为您尝试使用以前未声明的函数。

    要解决这个问题,你必须在使用函数之前声明它们;通常你通过包含适当的标题来做到这一点。 试试#include &lt;string.h&gt; 这就是定义strcpystrncpy 的地方。

    您的代码中会出现运行时错误,因为您将某些内容存储在 str 中,而没有为其分配任何内存。

    【讨论】:

      猜你喜欢
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2017-03-08
      • 2013-03-22
      • 2014-02-16
      相关资源
      最近更新 更多