gpt4 book ai didi

C - char* 为空?

转载 作者:太空宇宙 更新时间:2023-11-04 00:40:30 25 4
gpt4 key购买 nike

这可能很简单,但我不明白为什么我无法从这个 char* 中获取值。

这是我的问题:

static char* DIR_ENTRY_PATH = NULL;

...

while (1) // infinite loop

{

// accept a client connection

clientFd = accept (serverFd, clientSockAddrPtr, &clientLen);

if (fork() == 0) // Create child proc to get dir entry info

{

//read dir entry info
readInfo(clientFd);
printf("dpath: %s\n", DIR_ENTRY_PATH); //prints out the the correct value (DIR_ENTRY_PATH set in readInfo)
int test = 1;
//get dir entry info and write back
DIR *dir;
struct dirent *entry; //pointer to dir entry
struct stat stbuf; //contains file info

if((dir = opendir(DIR_ENTRY_PATH)) == NULL){ //make sure entry is valid
printf("error with dirent\n");
exit(1);
}
else{
printf("gathering directory entry info...\n");
while((entry = readdir(dir)) != NULL){
char *entryname = entry->d_name;
printf("path: %s\n", DIR_ENTRY_PATH); /*prints nothing out.. */ - PROBLEM IS HERE
printf("int: %d\n", test); //*prints 1 out.. */

...

读取信息():

//reads info from the client
void readInfo(int fdesc){
int fd = fdesc;
char str[200];

readLine(fd, str); //read line in from socket
DIR_ENTRY_PATH = str;
printf("received path: %s\n", DIR_ENTRY_PATH); //displays correct value
}
//reads a single line
int readLine(int fdesc, char *strng){
int fd = fdesc;
char *str = strng;
int n;

do{
n = read(fd,str, 1); //read a single character
}while(n > 0 && *str++ != 0);
return (n>0); //return false if eoi
}//end readLine

为什么我能得到 test int 的值而不是 dir_entry_path?感谢您的帮助。

最佳答案

您正在将指向局部变量的指针分配给全局变量,但是一旦函数返回,局部变量就消失了!

void readInfo(int fdesc){
int fd = fdesc;
char str[200]; // Local variable

readLine(fd, str);
DIR_ENTRY_PATH = str; // Pointer assigned to global
printf("received path: %s\n", DIR_ENTRY_PATH); //displays correct value
}

函数返回后,局部变量未定义,其存储可以被下一个函数等重用。

如何解决这个问题?有许多可能的方法,但最简单的方法可能是:

static char DIR_ENTRY_PATH[1024];

void readInfo(int fdesc){
int fd = fdesc;
char str[200]; // Local variable

readLine(fd, str);
strcpy(DIR_ENTRY_PATH, str); // Copy local string into global string

printf("received path: %s\n", DIR_ENTRY_PATH); //displays correct value
}

作为文体点,ALL_CAPS 通常表示一个宏,或一个 enum 值(因为 enum 有点像 #define,它使用全部大写)。

我希望您对 readLine() 进行了适当的边界检查。我懒得修改,只是确保全局变量比局部变量长(五倍)。调适合自己。我还将使用 enum 作为缓冲区大小(使用小写名称代替 DIR_ENTRY_PATH)。

关于C - char* 为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10510347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com