我是C新手并试图编写一个简单的Ceaser密码程序a-> b-> c等等。到目前为止,代码编译,但我得到一个错误139,当我查看它时,它出现了一个分段错误。我以前从来没有遇到这种情况,并想知道是否有人可以看看我做错了什么?
您好,感谢大家的帮助,139错误不再存在我的更新代码在下面工作:D。
#include <stdio.h>
int main()
{
char strg [100], ch;
int i;
printf ("Enter a string\n");
scanf ("%s" , strg);
for (i = 0; strg [i] != '\0'; ++i)
{
ch = strg[i];
if (ch >= 'a' && ch <= 'z')
{
ch = ch + 1;
if(ch > 'z')
{
ch = ch - 'z' + 'a' -1;
}
strg[i] = ch;
}
}
printf ("The string is %s", strg);
return 0;
}
答案 0 :(得分:4)
printf (“The string is %s, strg”);
中的拼写错误,实际上您没有为%s
提供参数。
写
printf ("The string is %s", strg);
代替。
答案 1 :(得分:2)
如果您使用函数scanf
来扫描字符串,则告知扫描字符的限制,因此如果您的数组有100个边界,请执行以下操作
scanf ("%99s" , strg); // Leave one byte for null terminating character
也在这里
ch = &strg[i];
您要将char*
分配给char
,删除&
引用运算符(此处用于获取变量地址)
ch = strg[i];
最后这个
printf ("The string is %s, strg");
会导致未定义的行为(从堆栈中挑选一些未定义的数据),我想你想做以下
printf ("The string is %s", strg);