我有这个代码,它不是为我运行的它不会给出任何错误或警告所以我不知道怎么了。我对结构中的指针没有太多经验,我甚至不知道这部分代码是否导致它无法运行。
我使用了两个代码::块和DeVC++来编译它,但两者都不起作用。
它有点长,但只有三个功能屏幕上根本没有我的指纹。
#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);
}
任何帮助都将不胜感激。
谢谢大家。
最佳答案
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)
关于c - C struct和指针程序在编译时不执行任何操作。不显示任何错误或警告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10237411/