c语言 编译错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 编译错误相关的知识,希望对你有一定的参考价值。

C:\Users\Administrator\Documents\未命名1.cpp In function 'void stsrt(char*, int)':
33 25 C:\Users\Administrator\Documents\未命名1.cpp [Error] invalid conversion from 'char' to 'const char*' [-fpermissive]
2 0 C:\Users\Administrator\Documents\未命名1.cpp In file included from C:\Users\Administrator\Documents\未命名1.cpp

上面是编译错误的部分提示,似乎是strst()函数中的strcmp()函数使用错误,使用的编译器是DEV C++5.6.3

#include<stdio.h>
#include<string.h>
#define SIZE 81
#define LIM 20
void stsrt(char *strings[],int num);

int main()
char input[LIM][SIZE];
char *ptstr[LIM];
int ct=0;
int k;

while(ct<LIM&&gets(input[ct])!=NULL&&input[ct][0]!='\0')

ptstr[ct]=input[ct];
ct++;

stsrt(ptstr,ct);
puts("here is the sorted list:\n");
for(k=0;k<ct;k++)

puts(ptstr[k]);


return 0;

void stsrt( char *strings,int num)

char *temp;
int top,seek;
for(top=0;top<num;top++)
for(seek=top+1;seek<num;seek++)
if(strcmp(strings[top],strings[seek])>0)
temp=strings[top];
strings[top]=strings[seek];
strings[seek]=temp;



看红线指向的strings[seek]是一个char,而strcmp函数是连接字符串的,函数传参错误

参考技术A strcmp只能比较两个字符串,你的strings[top]和strings[seek]都不是字符串,只是两个字符,故直接比较即可,
if(strings[top] > strings[seek])
参考技术B strcmp函数定义:

extern int strcmp(const char *s1,const char *s2);
参数是两个char *
你在使用时给的strings[top]是char

取下地址就好了,试试:

void stsrt( char *strings,int num)

char *temp;
int top,seek;
for(top=0;top<num;top++)
for(seek=top+1;seek<num;seek++)
if(strcmp(strings+top,strings+seek)>0)
temp=strings+top;
strings[top]=strings[seek];
strings[seek]=*temp;

追问

出现了新的错误。。

参考技术C 声明了*p
就是说p为指针变量,那么它只能用来存放指向其他数据的地址,不能够赋给它具体的数值
所以错误了
改成*p=37814108表示在指针变量p所指向的空间里面存放数据37814108
这样就不会有错误了
如果按照你的p=37814108的意识就需要把int
*p;和printf("%d",*p);
改成int
p;
和printf("%d",p);

明白了吗?
参考技术D 编译错误系统不一定崩溃系统崩溃不一定是编译错误编译错误主要指语法问题,而系统崩溃是程序本身代码不严谨(或是故意的?)产生硬件资源(主要是内存)被浪费或是非法修改所导致的。

C语言写的链表。明明没有错误,为啥编译器还会报错,?而且还爆出100+的错误,求解。

太长没有办法发过来,http://tieba.baidu.com/p/2077544469百度贴把的连接

参考技术A 就是前面和后面有点问题,直接用下面的替换掉对应的部分就行了。
你去私信里复制代码吧,私信里复制粘贴后不是一整行。

#include<malloc.h>
#include<stdio.h>
#include<stdlib.h>
/*-----------------------------------数据类型定义----------------------------------------*/
typedef struct node

int data; //链表结构,链表的数据域
struct node *next; //链表的结构,链表的指针域
LINKLIST;
LINKLIST * set(); //声明将要用到的建立链表的函数
void insert(LINKLIST*); //这里声明了一个插入添加数据的函数!!!声明一个带有参数的函数的时候记得传递参数!
void output(LINKLIST*); //声明一个输出函数
void del(LINKLIST*); //删除一个数据的声明
void alter(LINKLIST*); //修改一个结点的数据
void select(LINKLIST*); //查询某个位置的数据
void select1(LINKLIST*); //高级查询,查询数据所在的位置
/*------------------------------------主函数----------------------------------------*/
void main() //主函数
...............................
...............................
...............................
...............................
/*---------------------------------------------查询某个结点在哪几个位置上出现---------------------------------------------*/
void select1(LINKLIST *SQ)

LINKLIST *q;
LINKLIST *p;
q = (LINKLIST*)malloc(sizeof(LINKLIST));
p = (LINKLIST*)malloc(sizeof(LINKLIST));
p->data = -1;
q = p;
printf("Please input the query node data:");
int data;
// int sum[100];
// sum[0] = -1;
scanf("%d",&data);
for(int i = 1,j = 0;SQ->data!=NULL;i++) //如果SQ不是空的则一直检索下去

if(SQ->data == data) //如果检索到相同的就将这个结点的位置保存到sum数组中。

q->data = i;
q = q->next;
//sum[j+1] = sum[j];
//sum[j] = i;
//j++; SQ = SQ->next;
if(p->data == -1) //如果检索完之后sum[0]还是-1那么就输出没有找到


printf("Did not find the same data");

else //否则输出数据

while(p->data!=NULL)

printf("%d",p->data);
p = p->next;

//int j =1;
//while(sum[0]!=-1)
//
// printf("%d\t",sum[j]);
// j++;
//




/*------------------------------------定义插入结点链表函数----------------------------------------*/
LINKLIST *set() //定义插入结点链表函数

printf("please input the integer to inster :\n");
/*Q 是用来返回的头结点,P用来新建结点,Prep用来设置表尾结点。Prep*/
LINKLIST *P,*Q,*Prep;

int x = 0;
Q = (LINKLIST*)malloc(sizeof(LINKLIST)); //为要输入的链表指针定义空间。
Q->data = -1;
Q->next = NULL;
Prep = Q; //把Q给了Prep Q依旧是头结点,以后输入每一次都给Prep赋值。 scanf("%d",&x); //输入要插入的数值。
while(x!=-1)

P = (LINKLIST *)malloc(sizeof(LINKLIST));
P->data = x; //使用P作为一个中转链结点,
P->next = NULL;
Prep->next = P; //链表的最后一个结点的后一个结点为P
Prep = Prep->next; //保证Prep一直是最后。因为每次插入表尾结点都是在最后。
scanf("%d",&x);
P = P->next; //这样的话可以随时释放临时的P结点,节约空间。
Prep->next = NULL; //结点的最后一个为空


free(P);
/*如果没有P = P->next;这里的P不可以释放。
因为当时P的值是给了Prep->next的。
又执行Prep = Prep->next 导致现在得P是链表中的最后一个结点。*/
return(Q);
追问

后一段也发下私信好吗?还有告诉我为什么好吗?那一段出了问题?

倒数第二个函数的大括号那不是刚刚好吗?

追答

不是,已经发了。选择一段代码,然后按Alt+F8,就会帮助对齐代码,这样看就比较清楚了。

追问

问题检查出来了。我用的是C编译的,一开始用的是C++,C++中变量的定义可以在语句的中间,而C却不可以,导致出现了现在的情况。

本回答被提问者采纳
参考技术B 会不会是编译器的版本不同啊 你写的是哪个版本的C语言追问

一开始的时候编译好好的,就是这个代码,后来我想放到每个头文件一个函数,结果没弄好,我又把各个函数拷贝回来,当时没有做备份,然后就悲剧了,换了VS2008编译也不能。
我这里还有编译成功的exe文件可以运行呢

以上是关于c语言 编译错误的主要内容,如果未能解决你的问题,请参考以下文章

C语言编译、连接的各种错误

一道c语言题,编译无错误,调试时出现“0x00403c2c 指令引用的 0x00000001 内存”,该内存不能为read。

IDEA编译报语法错误? 可能是默认机制搞的鬼!

C语言写的链表。明明没有错误,为啥编译器还会报错,?而且还爆出100+的错误,求解。

fluent编译UDF的过程中,出现了语法错误

c语言helloworld代码是对的,但编译错误?