Arrays 使用%s格式说明符时发生读取访问冲突
我一直在尝试编写一个以字符串作为输入的程序,而输出将是用莫尔斯电码编写的相同字符串,但是在使用%s格式说明符和*(摩尔斯+I)时,会出现读取访问冲突Arrays 使用%s格式说明符时发生读取访问冲突,arrays,c,Arrays,C,我一直在尝试编写一个以字符串作为输入的程序,而输出将是用莫尔斯电码编写的相同字符串,但是在使用%s格式说明符和*(摩尔斯+I)时,会出现读取访问冲突 #包括 #包括 #包括 #杂注警告(禁用:4996) 无效代码(字符[],常量字符*mors){ char-arr[256]; printf(“要编码的字符串:\n”); fgets(arr,256,标准DIN); 对于(int计数器=0;计数器
#包括
#包括
#包括
#杂注警告(禁用:4996)
无效代码(字符[],常量字符*mors){
char-arr[256];
printf(“要编码的字符串:\n”);
fgets(arr,256,标准DIN);
对于(int计数器=0;计数器
代码中的两个主要问题-
First,这里是传递mors
字符串数组的第一个字符串-
code(litery, *mors);
*mors
与more[0]
相同,也就是说,您在这里传递指针指向0
th索引的字符串,即字符串“-”
。相反,您应该传递整个mors
数组
应该是
code(litery, mors);
^^^^
您还必须修改code()
函数的第二个参数的类型才能接收mors
字符串数组,如下所示
void code(char litery[], const char** mors)
^^
秒,而不是将arr[i]
与litery[i]
进行比较,您应该将arr
计数器索引处的数组元素与litery[i]
if (arr[counter] == litery[i]) {
^^^^^^^
当我发布这个答案时,OP已经编辑了这个问题,并纠正了我在他的代码中指出的第二个问题。
另外,
当用户输入并按下<代码>输入< /代码>键时,<代码> FGETSH()/代码>将换行符视为一个有效字符,并将其包含在用户给出的输入字符串中。在处理输入缓冲区
arr
之前,请删除尾随的换行符,如下所示:
arr[strcspn(arr, "\n")] = 0;
你给我们的代码有很多问题。我不知道从哪里开始,但我将跳过所有的解释,这是您的工作代码,但我不喜欢使用您的输入和内存管理风格:P
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning(disable : 4996)
void code(const char** litery[], const char** mors) {
char arr[256];
printf("string to be coded:\n");
fgets(arr, 256, stdin);
for (int counter = 0; counter < strlen(arr); ++counter) {
if (arr[counter] == ' ') {
printf(" ");
}
int i;
for (i = 0; i < 36; ++i) {
if (arr[counter] == litery[i]) {
printf("%s", (mors[i]));
break;
}
}
}
}
int main() {
const char* litery[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
const char* mors[] = { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", "-----" };
code(&litery, &mors);
}
#包括
#包括
#包括
#杂注警告(禁用:4996)
无效代码(常量字符**litery[],常量字符**mors){
char-arr[256];
printf(“要编码的字符串:\n”);
fgets(arr,256,标准DIN);
对于(int计数器=0;计数器
是的,你完全正确,谢谢你的帮助!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning(disable : 4996)
void code(const char** litery[], const char** mors) {
char arr[256];
printf("string to be coded:\n");
fgets(arr, 256, stdin);
for (int counter = 0; counter < strlen(arr); ++counter) {
if (arr[counter] == ' ') {
printf(" ");
}
int i;
for (i = 0; i < 36; ++i) {
if (arr[counter] == litery[i]) {
printf("%s", (mors[i]));
break;
}
}
}
}
int main() {
const char* litery[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
const char* mors[] = { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", "-----" };
code(&litery, &mors);
}