我的主要功能中的开关4的情况一直发生崩溃,无法修复它。
我会解释一下代码,希望你们能帮助我:
初始化功能
void function1(char[]);
声明字符串数组
const char *my_array[] = {
"Array of strings one",
"Array of strings two",
"Array of strings three"};
循环遍历main函数中的字符串数组(这正常,它会打印字符串数组)
int i;
for (i=0; i < 3; i++) {
printf("%s\n", my_array[i]);
}
切换功能中的代码(仍在主函数中)
case 4:
function1(my_array);
break;
我已经测试过并且所有以前的代码都能正常工作,问题出在这里(在main函数之外):
void function1(char my_array[]) {
for (i=0; i < 3; i++) {
printf("%s\n", my_array[i]);
}
printf("\n");}
当我执行开关的情况4时,它会崩溃。
日志给出的2警告:
警告:从不兼容的指针传递'function1'的参数1 型
警告:格式'%s'需要类型为'char *'的参数,但参数为2 类型'int'[-Wformat =]
很抱歉,如果解释有点不清楚,我尽可能地努力让它变得容易理解。
我真的希望你们能帮助我,谢谢!!
答案 0 :(得分:9)
第一个警告,即
警告:传递&#39; function1&#39;的参数1来自不兼容的指针类型
讲述了这个故事:你传递了一个字符指针数组,但是函数声明说它需要一个简单的字符指针。
第二个警告从函数内部告诉你同样的事情:
警告:格式&#39;%s&#39;期望类型&#39; char *&#39;的参数,但参数2的类型为&#39; int&#39; [-Wformat =]
格式需要一个C字符串,但是你要传递一个char
* 。
您需要做的就是在function1
的声明中添加一个缺少的星号:
void function1(const char *my_array[])
// ^^^^^ ^
在您访问时,请添加const
以匹配my_array
中main
的声明。
* 编译器说您传递的是int
,而不是char
,因为printf
需要可变数量的参数,因此编译器应用某些转换函数的论点。其中一种转变是将所有char
提升为int
s。
答案 1 :(得分:1)
请仔细查看功能减速
void function1(char my_array [])
你传入的char数组是字符串(显然你不想要)。第二个问题是这一行,
printf(%c\n", my_array[i]);
当您说my_array [i]时,您正试图访问字符,并且在&#39; i&#39;位置并使用%s打印一个字符(这是一个崩溃)。要打印一个角色,你应该写这个
void function1(const char* my_array[])
{
for (size_t i = 0; i < 3; i++)
{
printf("%s\n", my_array[i]);
}
printf("\n");
}
现在让我们根据你的要求修复代码,你应该有一个带有char指针数组的函数(OR string)
void function1(const char* my_array[], size_t n)
{
for (size_t i = 0; i < n; i++)
{
printf("%s\n", my_array[i]);
}
printf("\n");
}
请注意使用&#39; const&#39; (如果您只需要读取/打印字符串数组中的数据)。请考虑发送数组的大小并使用该大小迭代循环。
{{1}}
答案 2 :(得分:1)
好的我们已经尝试了所有的解决方案,当我添加&#34; const&#34;在函数中,它给出了一个错误&#34;冲突类型中的错误&#34;。
阅读所有人我发现我只传递函数中的一个字符而不是一串字符(函数和函数的初始化中缺少*)。
我改变了这个:
void function1(char[]);
对此:
void function1(char*[]);
和此:
void function1(char my_array[]) {
for (i=0; i < 3; i++) {
printf("%s\n", my_array[i]);
}
printf("\n");
}
到此:
void function1(char* my_array[]) {
for (i=0; i < 3; i++) {
printf("%s\n", my_array[i]);
}
printf("\n");
}
它就像一个魅力!
很抱歉,如果这是一个noob问题,但我从C编程开始。
谢谢大家的回答,我很感激!
答案 3 :(得分:0)
假设你想要一个循环遍历数组元素并打印其所有内容的函数,这就是我的建议:
#include <stdio.h>
#include <stdlib.h>
void view(char *array[]){
int i;
for (i = 0; i < sizeof(array)/sizeof(char); i++){
//sizeof(array)/sizeof(char) = length of any array
printf("\nElement -> %s",array[i]);
}
}
int main() {
char *arr[] = {"String One", "String Two", "String Three"};
view(arr); //Calling the function
return 0;
}