【发布时间】:2020-12-16 15:06:52
【问题描述】:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char slovo(char *x);
int main ()
{
char x;
x=(char *)malloc(50*sizeof(char));
fgets(x,sizeof(x),stdin);
printf("%s",slovo(x));
return 0;
}
char slovo(char *x)
{
int i,n;
n=strlen(x);
for(i=0;i<n;i++)
{
if ((x[i]>='A' && x[i]<='Z') || (x[i]>='a' && x[i]<='z')) x[i]=x[i];
else x[i]= ('A'+(rand()%26) || ('a'+(rand()%26)));
}
return x;
}
任务是输入一个最多 50 个字符的字符串,并为 50 个字符分配内存。如果字符串中的字符不是字母,我必须将其随机转换为任何字母。我有很多错误,我不知道该怎么办。
8 3 C:\Users\x\Documents\juarsr.c [警告] 赋值从指针中生成整数而不进行强制转换
9 8 C:\Users\x\Documents\juarsr.c [警告] 传递 'fgets' 的参数 1 使指针从整数而不进行强制转换
10 20 C:\Users\x\Documents\juarsr.c [警告] 传递 'slovo' 的参数 1 使指针从整数而不进行强制转换
4 6 C:\Users\x\Documents\juarsr.c [注意] 预期为 'char ' 但参数是 'char' 类型
24 2 C:\Users\x\Documents\juarsr.c [警告] return 从指针中生成整数而不进行强制转换
【问题讨论】:
-
另外,这并没有引发警告,但在
slovo的第 7 行中,您实际上将x[i]设置为这两个值的逻辑or,这实际上将始终为1,因为它们都将非零。相反,您想做类似else x[i]=(rand() % 2) ? ('A'+(rand()%26)):('a'+(rand()%26));的事情。 -
你好像不明白
char和char*以及它们之间的区别。我建议你回去重读你的讲座,从一本好书开始The Definitive C Book Guide and List -
(如果你还没有遇到
C中的三元运算符(即__ ? __ : __运算符),那这行代码基本上返回冒号右边的值,如果表达式问号左边为0,否则返回冒号左边的值) -
@jurepure123 这个赋值x[i]=x[i]有什么意义?
标签: c pointers c-strings allocation function-definition