1

我有这个代码,它没有为我运行。它不会给出任何错误或警告。所以我不知道它有什么问题。我对结构中的指针不太熟悉,我什至不知道这部分代码是否导致它无法运行。

我已经使用了 Code::Blocks 和 DevC++ 来编译它,但两者都没有任何不同。

它有点长,但只有 3 个功能。对我来说根本没有任何东西打印到屏幕上。

#include <stdio.h>
#include <stdlib.h>

struct foo{
        int num;
        char *word;
        struct foo *ptr;
};
void func1(struct foo);
void func2(struct foo*);
void func3(struct foo);

int main() {
        struct foo a;
        a.num = 5;
        a.word ="myword";
        func1(a);
        printf("1 %d %s\n", a.num, a.word);

        a.num = 100;
        a.word = "secondword";
        func2(&a);
        printf("2 %d %s\n", a.num, a.word);

        a.ptr = &a;
        a.num = 50;
        a.word = "mylastword";
        func3(a);
        printf("4 %d %s\n", a.num, a.word);
}

void func1(struct foo a)
{
        while(*(a.word) != '\0');
        {
            putchar(*(a.word));
            a.word++;
        }
        putchar('\n');
        if(a.num % 10 != 0)
        {
            a.num *= 2;
        }
        a.word--;
        printf("num is %d\n", a.num);
}

void func2(struct foo *a)
{
        while(*(a->word) != '\0')
            { putchar(*(a->word));
              a->word++; }

                    putchar('\n');
        if(a->num % 10 != 0)
            { a->num *= 2; }
        a->word--;
        printf("num is %d\n", (*a).num);
}

void func3(struct foo a)
{
        if(a.num > a.ptr->num)
            { a.num = 500; }
        else
            { a.num = a.ptr->num +1; }
        a.word = "myotherword";
        a.ptr->word = "yetAnotherWord";
        printf("3 %d %s\n", a.num, a.word);
}

任何帮助将非常感激。

谢谢你们。

4

1 回答 1

8
void func1(struct foo a)
{
    while(*(a.word) != '\0');

while 语句后不应有分号。

修复后,它会打印:

[4:58pm][wlynch@watermelon /tmp] ./foo
myword
num is 10
1 5 myword
secondword
num is 100
2 100 d
3 51 myotherword
4 50 yetAnotherWord

为了强化abelenky 的评论,使用调试器需要3 秒才能发现。

[4:59pm][wlynch@watermelon /tmp] g++ -g foo.cc -o foo
[4:59pm][wlynch@watermelon /tmp] gdb ./foo
GNU gdb 6.3.50-20050815 (Apple version gdb-1752) (Sat Jan 28 03:02:46 UTC 2012)

(gdb) run
Starting program: /private/tmp/foo 
Reading symbols for shared libraries ++......................... done
^C
Program received signal SIGINT, Interrupt.
func1 (a={num = 5, word = 0x100000e91 "myword", ptr = 0x7fff5fbffa58}) at foo.cc:34
34      while(*(a.word) != '\0');
(gdb)   
于 2012-04-19T21:57:44.230 回答