我正在用 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/