去瞧瞧 发表于 2016-11-4 23:44:57

程序能编译成功但是运行出错,感觉是函数参数错了,求告知怎么改?

#include <stdio.h>
void print_ch(char *ch);
int main(void)
{
        char *ch[] = { "1", "2" };
        print_ch(ch);
}

void print_ch(char *ch)
{
        printf("%s",ch);
}

Krant5 发表于 2016-11-5 00:39:32

函数参数为 char **ch 或者char *ch[]

fc1735 发表于 2016-11-5 01:01:01

本帖最后由 fc1735 于 2016-11-5 01:08 编辑

#include <stdio.h>
void print_ch(char *ch);
int main(void)
{
        char *ch[] = { "1", "2" };
        print_ch(ch);//类型不相同的警告,但这是编译器的事,不影响,可以不理会 。(指向 指向字符的 到指向字符的)
}

void print_ch(char *ch)
{
        printf("%s",ch); //但是这里会有问题,编译器在这里认定ch 是指向字符的,ch+4 到ch+7这段内存储存的是字符串"2"的地址,但它只取ch+4这个byte当作字元解读。

}

解决办法之一是把void print_ch(char *ch); 改成void print_ch(int *ch);因为int也占4个byte 指向int的, 在取值的时候也是抓4个位置
但是最好的办法是想清楚每个指针的实质意义,避免类型不同的计算

去瞧瞧 发表于 2016-11-5 08:20:57

Krant5 发表于 2016-11-5 00:39
函数参数为 char **ch 或者char *ch[]

谢谢

去瞧瞧 发表于 2016-11-5 08:27:36

fc1735 发表于 2016-11-5 01:01
#include
void print_ch(char *ch);
int main(void)


谢谢
页: [1]
查看完整版本: 程序能编译成功但是运行出错,感觉是函数参数错了,求告知怎么改?