0

我只是想测试我是否正确安装了新的 ide 并尝试在 IDE 中以及使用 gedit 和 GCC 编译这个基本程序,它会编译,但是在我在命令行中启动可执行文件后崩溃 - 我没有知道出了什么问题,因为我对 C 中的指针还很陌生,根据大多数人的说法,你需要一段时间才能理解这个理论。

代码:

#include <stdio.h>
#include <string.h>

    char print_func(char *hi);

    int main(void) {
        char *hi = "Hello, World!";
        print_func(*hi);
    }

    char print_func(char *hi) {
        printf("%d \n", *hi);
    }

我试过这个:

#include <stdio.h>
#include <string.h>

char print_func(char *hi);

int main(void) {
    char *hi = "Hello, World!";
    print_func(&hi);
}

char print_func(char *hi) {
    printf("%d \n", *hi);
}

它输出 44 没有崩溃。

4

4 回答 4

1

如果您使用间接方式,print_func(*hi);您将传递一个 char 并且它是一个字节。因此,当您尝试读取更大的整数时,会发生访问冲突。您应该使用指针调用您的函数print_func(hi)。而如果要打印字符串的地址,最好%p在printf中使用:

printf("%p \n", hi); // print the address of hi

如果要打印 hi 中的第一个字符,请%c改用:

printf("%c \n", *hi); // print first character of hi

如果要打印 hi 中第一个字符的值,请改用%d强制转换:

printf("%d \n", (int)*hi); // print the value of the first character of hi

要打印整个字符串,请使用%s并传递指针:

printf("%s \n", hi);
于 2012-07-22T14:52:54.870 回答
1

那是因为您将一个字符值传递给函数并将其作为地址提供给 print_func 中的指针变量“hi”。如果您的程序旨在打印字符串,那么这会很好 -->

#include <stdio.h>
#include <string.h>

char print_func(char *hi);

int main(void) {
    char *hi = "Hello, World!";
    print_func(hi);
}

char print_func(char *hi) {
    printf("%s \n", hi);
}
于 2013-09-03T17:35:31.393 回答
0

即使在第二种情况下,我也看到了一个问题。

print_func(&hi);

您正在传递指针的地址,而您必须仅传递指针本身。删除&in 函数调用。

于 2012-07-22T14:49:43.560 回答
0

好吧,您的函数正在等待一个字符串作为参数,然后您发送一个字符或一个指向字符串的指针!

如果你想打印字符串的第一个字符,你应该只发送你的字符串。

print_func(hi);
于 2012-07-22T14:50:51.190 回答