我一直在收到错误
分段错误(核心转储)
我在Codeblocks IDE linux中编译我的C代码。
我浏览了一下,甚至尝试了解决之前在stackOverflow上提出的问题,但无济于事。
有人可以帮忙。
这是我的代码:
`
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Declaration of Global Variables */
char message, chat ;
char user, pass, to, from;
int choice, response;
char filename[];
char buffer;
/* The API response Handler */
void fileHandler(int typ){
/*
typ = 0 for ordinary responses
typ = 1 to get chat data
*/
if( typ == 0 ){
filename[13] = "response.chat";
}else if(typ == 1){
filename[9] = "chat.chat";
}
FILE *p;
if( ( p=fopen(filename,p)!=NULL) )
puts(chat);
fclose(p);
}
/* The loged in user handler */
void logedIn(){
printf("Welcome!\n\nPlease select an action:\n\t1. Send Message\n\t2. Read Messages\n\t3. Delete Account");
scanf("%d", choice);
switch(choice){
case 1:
//Chat
printf("Enter Recipient: ");
scanf("%s", &to);
printf("Enter Message: ");
scanf("%s", &message);
snprintf(buffer, 999, "php interface.php doChat %s %s %s", to, user, message );
system( buffer );
fileHandler(0);
break;
case 2:
//read message
snprintf(buffer, 999, "php interface.php readChat %s", user );
system( buffer );
fileHandler(1);
break;
case 3:
//delete account
snprintf(buffer, 999, "php interface.php delUser %s", user );
system( buffer );
fileHandler(0);
abort();
break;
default:
system("clear");
logedIn();
break;
}
}
/* The user addition handler */
void addUser(){
snprintf(buffer, 999, "php interface.php addUser %s %s", user, pass);
system( buffer );
fileHandler(0);
printf("USER ADDED!");
system("clear");
main();
}
/* The login request handler */
void doLogin(){
snprintf(buffer, 999, "php interface.php doLogin %s %s", user, pass);
system( buffer );
fileHandler(0);
logedIn();
}
/* The chat message send handler */
void doChat(){
}
/* The user delete handler */
void delUser(){
snprintf(buffer, 999, "php interface.php delUser %s ", user);
system( buffer );
fileHandler(0);
printf("USER DELETED!");
system("clear");
abort();
}
/* The chat render handler */
int main()
{
printf("\t\t\t\tMyC CHAT\n\n\t\t\tSELECT AN ACTION:\n\t\t\t1. Signup\n\t\t\t2. Login\n\t\t\t3. Exit\n\t\t\t:");
scanf("%d", &choice);
switch ( choice ){
case 1:
/* Do a user signup */
system("clear");
printf("USER LOGIN");
printf("\nEnter username :");
scanf( "%s", &user );
printf("\n\nEnter Password: ");
scanf( "%s", &pass );
addUser();
break;
case 2:
/* Do a user login */
system("clear");
printf("USER LOGIN");
printf("\nEnter username :");
scanf( "%s", &user );
printf("\n\nEnter Password: ");
scanf( "%s", &pass );
doLogin();
break;
case 3:
abort();
/* Exit */
break;
default:
/* Give the user another chance */
system("clear");
main();
break;
}
}
`
在Ubuntu 14.04上运行
尝试使用写入文件的php文件实现简单的聊天系统。
谢谢。
答案 0 :(得分:3)
您的代码中有很多错误,因为@SSC建议使用所有警告编译代码。并使用gdb
或其他一些调试器来识别崩溃。
但首先,在main()
你有
scanf( "%s", &user );
...
scanf( "%s", &pass );
user
和pass
char
不是char *
也不是char
数组。因此,当您读取用户名时,它将覆盖内存。您需要使用char *
相应地分配内存或使用char
数组。
还有
scanf("%d", choice);
应该是
scanf("%d", &choice);
//----------^
答案 1 :(得分:1)
代码的问题主要是声明不好的变量。 特别是存储文件输入的缓冲区变量。
然而,主要错误是动态分配的#34;变量
&#34;文件名&#34;被改为&#34; fil&#34;并作为fileHandler函数中的参数传递
/* Declaration of Global Variables */
char message, chat ;
char user, pass, to, from;
int choice, response;
char filename[];
char buffer;
在坐立不安整夜并阅读无数手册之后[这些手册并不是很好吃的](是的,我显然是一个菜鸟!)
我在变量上尝试了很多不同的东西,然后想出了
int choice, resp;
char user[], pass[], to[], message[], from[], chat[9999], buffer[9999];
感谢Michel @ ueab的支持!!
功能性但图形和功能上可怕的应用程序可以在以下位置找到: