我正在编写一个程序,它接受命令行参数和用户输入,并计算两个字符之间的差异(加密)。我想将我的参数传递给程序中的变量,但我无法这样做。
#include <stdio.h>
int main(int argc, char** argv) {
char plain[2];
char cipher[2]; /*locations of plain and cipher text*/
char *ppoint; /*pointers to plain and cipher*/
char *cpoint;
scanf("%s",plain);
*ppoint=plain[0]; /* ppoint points to 1st character in plain*/
cipher=argv[1]; /* cpoint points to first argument character*/
*cpoint=cipher[1];
printf("%s %d \n",ppoint,plain);
printf("%s %d \n",cpoint,cipher);
return 0;
}
对于第14行,我遇到编译错误, (cipher = argv [1];)&#34;分配中的不兼容类型&#34; 我一直在尝试许多方法,例如类型转换,但我无法工作。
我希望程序的最后两行输出实际字符及其各自的ASCII值。请帮助我过去这个街区!
更新:
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv) {
char plain;
char *cipher; /*locations of plain and cipher text*/
int *ppoint; /*pointers to plain and cipher*/
int *cpoint;
scanf("%s",plain);
*ppoint=(int) plain; /* ppoint points to 1st character in plain*/
cipher=argv[1]; /* cpoint points to first argument character*/
*cpoint=(int) cipher;
printf("%s %d \n",plain);
printf("%s %d \n",cipher);
return 0;
}
我使用类型转换来修复任何编译器错误。但是,在运行程序并为“简单”设置值时,我遇到了分段错误。我看起来很长很难,但看不到这个内存错误发生的地方。请帮忙。
答案 0 :(得分:0)
您正在尝试为char
数组分配char
指针,这是不允许的。你需要以其他方式复制参数。例如,您可以使用strcpy:
strcpy(cipher,argv[1]);
或者,如果您从未对其进行修改,则可以将cipher
设为char
指针。
const char *cipher;
...
cipher = argv[1];
答案 1 :(得分:0)
尝试使用,
ppoint=(int) plain; /* ppoint points to 1st character in plain*/
没有'*',因为你不能在指针变量上使用解引用运算符,因为指针还没有指向任何位置。