2011-08-07 50 views
0

下面的程序出现错误。c中的结构

#include "stdafx.h" 
#include<stdio.h> 

struct s 
{ 
    char *st; 
    struct s *sp; 
}; 

struct s *p1,*p2; 
swap(p1,p2); 

int main() 
{ 
    int i; 
    struct s *p[3]; 
    static struct s a[]={ 
     {"abc",a+1},{"def",a+2},{"ghi",a} 
    }; 
    for(i=0;i<3;i++) 
    { 
    p[i]=a[i].sp; 
    } 
    swap(*p,a); 
    printf("%s %s %s\n",p[0]->st,(*p)->st,(*p)->sp->st); 
    return 0; 
} 

swap(p1,p2) 
{ 
    char *temp; 
    temp = p1->st; 
    p1->st = p2->st; 
    p2->st = temp; 
} 

如何使这个程序working.Even如果我们没有把int之前交换,我希望它会默认将它作为int。

错误C4430:缺少类型说明符 - int假定。注意:C++不 支持默认int

错误C2078:太多的初始值设定

错误C2440:初始化:不能从转换的*'到“廉政” 没有上下文中,这种转换是可能的

错误C2450:术语不计算为服用2个参数

功能

错误C2456: '交换':函数式

+0

能否请您为这些错误提供的行号?另外,我觉得一些文字可能会在错误信息已经丢失。我重新格式化,但它仍然看起来有点奇怪 –

回答

3

尝试

void swap(struct s *p1, struct s *p2); 

void swap(struct s *p1, struct s *p2) 
{ 
    char *temp; 
    temp = p1->st; 
    p1->st = p2->st; 
    p2->st = temp; 
} 
2

swap函数不返回任何东西。在C中,这应该用void关键字标记(请参阅@ Dave的评论,它确实是允许的,但看起来如同您正在使用C++编译器进行编译时那样不允许)。你还必须指定类型的p1p2

void swap(struct s *p1, struct s *p2); 

void swap(struct s *p1, struct s *p2) 
{ 
    // ... 
} 
+2

技术上,它没有*有*函数,返回类型默认为'int',而'int'函数没有*有*返回语句。 – Dave

2
swap(p1,p2) 
{ 
    /* ... */ 
} 

这是不对的。您需要指定p1,p2作为函数定义的一部分。即使与swap函数的前向声明一样。还提到它是返回类型。

1

你的程序有许多错误......他们中的一些,我不能正确的,因为我不能得到什么应该是预期的行为...

第一件事,第一,你不需要全局声明您要定义的函数的参数struct s *p1,*p2。其次,函数原型必须包含有问题的参数类型以及返回类型(在您的情况下为void)。第三件事,交换功能的第一个参数是一个指向你的结构的指针,因此你需要传递第一个元素(一个指针指向一个

以下编译并不会seg故障,即使我认为其行为是不是你所期望的一个。

#include <stdio.h> 

struct s { 
    char *st; 
    struct s *sp; 
}; 

void swap(struct s *ptr1, struct s *ptr2); 

int main() { 
    int i; 
    struct s *p[3]; 

    static struct s a[]={ {"abc",a+1}, {"def",a+2}, {"ghi",a} }; 
    for(i=0;i<3;i++) { 
     p[i] = a[i].sp; 
    } 
    swap(p[0], a); 
    printf("%s %s %s\n",p[0]->st,(*p)->st,(*p)->sp->st); 
    return 0; 
} 

void swap(struct s *ptr1, struct s *ptr2) { 
    char *temp; 
    temp = ptr1->st; 
    ptr1->st = ptr2->st; 
    ptr2->st = temp; 
}