我有一个问题,当我尝试printf
的输出getenv
时出现分段错误。
我将学习如何处理环境函数库。
我没有在代码中看到任何错误,并且感到非常沮丧。
这是我的代码:
extern char **environ;
char c;
int main(int argc, char **argv)
{
char *input2 = malloc(sizeof(char)*20);
char *s = malloc(sizeof(char)*20);
if(input2==NULL||s==NULL)printf("malloc failed");
printf("---------------------\n"
"Environment-List Menu\n"
"---------------------\n\n"
"[1]: Print environment list\n"
"[2]: Print environment entry (getenv)\n"
"[3]: Add environment entry (putenv)\n"
"[4]: Modify environment entry (setenv)\n"
"[5]: Remove environment entry (unsetenv)\n"
"[0]: End\n\n");
while(1)
{
char a, temp2;
a=getchar();
int input = atoi(&a);
switch(input)
{
case 1:
while(*environ) puts(*environ++);
break;
case 2:
printf("Please enter the entry you're looking for and press enter:\n");
while((temp2=getchar()!=EOF))
{
printf("beginning loop\n");
printf("%s\n",input2);
printf("end of loop\n");
}
printf("after loop\n");
s = getenv(input2);
printf("getenv was called");
printf("%c\n",*s);
break;
case 3:
case 4:
case 5:
case 0:
return EXIT_SUCCESS;
default:
break;
}
}
return 0;
}
答案 0 :(得分:0)
以下建议的代码:
现在,建议的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE 1024
extern char **environ;
int main( void )
{
int done = 0;
while( !done )
{
char **envList = environ;
printf("---------------------\n"
"Environment-List Menu\n"
"---------------------\n\n"
"[1]: Print environment list\n"
"[2]: Print environment entry (getenv)\n"
"[3]: Add environment entry (putenv)\n"
"[4]: Modify environment entry (setenv)\n"
"[5]: Remove environment entry (unsetenv)\n"
"[0]: End\n\n");
int choice = getchar();
int ch;
while( (ch = getchar()) && ch != '\n' );
switch( choice )
{
case '1':
while(*envList)
{
puts(*envList);
envList++;
}
break;
case '2':
printf("Please enter the entry you're looking for and press enter:\n");
char line[ MAX_LINE ];
if( !fgets( line, sizeof( line ), stdin ) )
{
perror( "fgets failed" );
}
else
{
line[ strcspn( line, "\n" ) ] = '\0';
if( strlen( line ) == 0 )
{
break;
}
//puts( line );
char *temp = getenv( line );
if( !temp )
{
printf( "%s not found\n", line );
}
else
{
puts( temp );
}
}
break;
case '3':
case '4':
case '5':
puts( "that option not yet implemented" );
break;
case '0':
done = 1;
break;
default:
puts( "invalid menu option, try again" );
break;
} // end switch
}
return 0;
}