我在C编程中遇到以下问题。
我有一个字符串数组存储为单词[10] [50]。我想从数组中提取每个字符串,然后将其传递给另一个函数。我尝试了以下内容:
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
int Check_Anagram(char*,char*);
void main()
{
char words[10][20];
int i;
int flag;
for(i=0;i<3;i++)
{
scanf("%s\n",words[i][20]);
}
for(i=1;i<10;i++)
{
flag = Check_Anagram(words[i][20],words[i-1][20]);
}
getch();
}
int Check_Anagram(char *a,char *b)
{
printf("%s %s\n",a,b);
return 1;
}
这会在编译期间创建异常。 现在我认为,当我使用“printf”语句时,这个命名法工作正常i.i words [i]从双维字数组打印字符串“i”。当我尝试使用检查功能执行相同的操作时,会发生错误。
Soemone能指点我怎么做这个传递吗?
P.S。请忽略程序效率的任何错误。我需要你的帮助,这只是一个学习字符串传递给函数的测试程序 谢谢
答案 0 :(得分:4)
你正在通过words[i][20]
。您需要在两个循环中传递words[i]
而不是 。试试这个:
for(i = 1; i < 3; i++) /* i < 3 */
{
flag = Check_Anagram(words[i], words[i-1]);
}
另一个问题是,您正在阅读3
字符串并尝试打印10
。因此,当您传递words[3]
时,它包含垃圾:printf
尝试打印无需0终止的垃圾。
答案 1 :(得分:2)
在第一个for循环中,当i为0时,你指向单词[-1],这是你的例外。
答案 2 :(得分:1)
flag = Check_Anagram(words [i] [20],words [i-1] [20]);
你正在传递Check_Anagram每个单词的第21个字母。相反,你应该传递单词:
flag = Check_Anagram(words[i],words[i-1]);
您使用scanf
时遇到类似问题。要从控制台读取您要使用的每个单词的一行:
for(i=0;i<10;i++)
{
scanf("%s\n",words[i]);
}
答案 3 :(得分:0)
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
int Check_Anagram(char [],char []);
void main()
{
char words[10][20];
int i;
int flag;
for(i=0;i<3;i++)
{
scanf("%s\n",words[i]);
}
for(i=1;i<10;i++)
{
flag = Check_Anagram(words[i],words[i-1]);
}
getch();
}
int Check_Anagram(char a[],char b[])
{
printf("%s %s\n",a,b);
return 1;
}
在所有用户的帮助下,我终于得到了纠正。 我已经为那些正在努力将从字符串数组中提取的字符串传递给另一个函数的人发布了更正的代码。希望能帮助到你。