2012-07-22 92 views
0

我只是试图测试我是否正确安装了一个新的ide,并尝试编译这个基本程序,无论是在IDE中,还是使用gedit和GCC编译,但是我在命令行启动可执行文件后崩溃 - 我不知道什么是错误的,因为我对C语言中的指针还是比较新的,并且需要一段时间才能围绕这个理论进行讨论。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。

+2

宁可在'-pedantic'模式下运行GCC,或'-Wall'模式至少。代码的两个版本都被破坏:它们包含明显的错误,这些错误将被编译器检测到并伴随着诊断消息。事实上,即使在默认模式下,我也会从GCC获取此代码的诊断消息。你为什么忽略它们? – AnT 2012-07-22 14:55:06

+0

我不太确定,我还在学习。 – TheBlueCat 2012-07-22 14:59:55

+0

如果编译器给你一条消息试图帮助你;即使它只是一个警告它的线索,你做了一件坏事 – pm100 2013-09-03 17:39:40

回答

1

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

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

如果你要打印的第一个字符喜,使用%c代替:

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

如果你想打印在喜中第一个字符的值,使用%d代替,拥有铸造:

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

要打印整个字符串使用%s并通过指针:

printf("%s \n", hi); 
+0

好吧,我想打印字符的值*嗨,而不是单元格地址。 – TheBlueCat 2012-07-22 14:55:00

+0

好吧,打印出一个H,是否需要将我的字符放到数组中,以打印出整个“字符串”本身。 – TheBlueCat 2012-07-22 14:57:43

+0

@TheBlueCat,更新了答案 – perreal 2012-07-22 14:59:53

0

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

print_func(&hi); 

您正在传递指针的地址,而您只需传递指针本身。在函数调用中删除&

0

那么,你的函数正在等待一个字符串作为参数,并且你发送一个字符或一个指向字符串的指针!

如果要打印字符串的第一个字符,则应该发送字符串。

print_func(hi); 
1

那是因为你正在传递一个字符值的功能和给予,作为地址在print_func指针变量“喜”。 如果你的程序的目的是打印字符串那么这将是一件好事 - >

#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); 
}