初學C語言,在做CS50的第二節課,課后作業substitution的時候碰見的segmentation fault,實在是不明白問題在哪里,求助!!!
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
#include <memory.h>
bool isunique (const string str[]);
string substitution (string n[], string agrv[1]);
int main(int agrc ,string agrv[])
{
if (agrc != 2)
{
printf("Usage: ./substitution key\n");
return 1;
}
int length = strlen(agrv[1]);
if (length != 26)
{
printf("Key must contain 26 characters\n");
return 1;
}
if (isunique(&agrv[1]))
{
printf("Key must contain different characters\n");
return 1;
}
for (int i = 0; i < 26; i++)
{
if(isalpha(agrv[1]))
{
string n = get_string ("Plaintext: ");
n = substitution(&n,&agrv[1]);
printf("Ciphertext: %s\n", n);
}
else
{
printf("Key must contain alphabetic\n");
return 1;
}
}
}
bool isunique (const string str[])
{
bool a[256];
memset (a, 0, sizeof(a));
for (int i = 0, len = strlen(*str); i < len; i++)
{
printf("%c\n",*str[i]);
int index = *str[i];
[能確定問題就在這里,第一次運行沒有問題,會正確判斷第一個字母,但是第二次運行就會報段錯誤,是什么原因啊]
if (a[index])
{
return false;
}
a[index] = true;
}
return true;
}
string substitution ( string n[], string agrv[1])
{
for (int j = 0, len = strlen(*n); j < len; j++)
{
char c = *n[j];
if (isupper(c))
{
int x = (int)c - 'A';
*n[j] = toupper (agrv[1][x]);
}
else
{
int y = (int)c - 'a';
*n[j] = tolower (agrv[1][y]);
}
}
return *n;
}
uj5u.com熱心網友回復:
for (int i = 0, len = strlen(*str); i < len; i++)uj5u.com熱心網友回復:
... str[i] 不是 string 物件嗎?解參考是干啥?還賦值給 int,你這題目是想要干啥?uj5u.com熱心網友回復:
嗯,string作為型別可不是C語言風格,另外樓主還試探著把*敲著玩,這倆習慣不好哦。這個程式作為經驗,可以讓樓主進一步理解指標,地址和值 了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/269797.html
標籤:C語言
上一篇:萌新在線球大佬解惑!!!
下一篇:資料結構 各位大佬幫幫忙!!
