返回字符串文字?
Returning a string literal?
我有一个动态分配的指针数组,每个指针都指向文件中的一行文本。我需要提取文件的第四列(文件中的值用逗号分隔),以便稍后可以按该列对文件进行排序。我已经能够提取第四列文本,但是我无法 return 它用于我的主要功能,当我 return 它时,它是空白的,可能是什么问题?
getStart 找到所需列之前的逗号
int getStart(char** addresses, int index)
{
int i = 0;
int count = 0;
for(i=0;i < strlen(addresses[index]); i++)
{
if(addresses[index][i] == ',')
count += 1;
if(count == 3)
return i+1;
}
}
getStop 找到所需列末尾之前的逗号
int getStop(char** addresses, int index)
{
int i = 0;
int count = 0;
for(i=0;i < strlen(addresses[index]); i++)
{
if(addresses[index][i] == ',')
count += 1;
if(count == 4)
return i;
}
}
getSubject 获取开始和结束之间的所有字符,并将它们放入一个数组中(这是我 return 到 main 所需要的)
char* getSubject(char** addresses, int index)
{
int i = 0;
int start;
int stop;
char* final;
char subject[10];
start = getStart(addresses, index);
stop = getStop(addresses, index);
for(start; start<stop; start++)
{
subject[i] = addresses[index][start];
i++;
}
final = subject;
printf("%s %s\n", final, subject);
return final;
}
我知道函数工作的方式是
printf("%s %s\n", final, subject);
打印正确的值,但是当我在 main 中调用它时如下所示:
char* test;
test = getSubject(addresses, 43);
printf("%s\n", test);
test 打印一个空白值。这是为什么?
你让 final
指向 local 数组 subject
,然后 return 那个指针。这意味着您实际上 return 指向本地 subject
数组的指针,该数组一旦函数 returns 就超出范围,给您留下一个杂散指针和 undefined behavior.
最后的字符串需要分配内存,一般有两种方式:
使用例如strdup
在函数中分配内存和 return 指向新内存的指针。
传入一个指向足够内存缓冲区的指针作为函数的参数,并将字符串复制到该缓冲区。
您正在 return 指向堆栈变量的指针,您不能那样做。一旦你return,堆栈就会被清除。复制
return strdup(final);
调用完成后必须释放它
我有一个动态分配的指针数组,每个指针都指向文件中的一行文本。我需要提取文件的第四列(文件中的值用逗号分隔),以便稍后可以按该列对文件进行排序。我已经能够提取第四列文本,但是我无法 return 它用于我的主要功能,当我 return 它时,它是空白的,可能是什么问题?
getStart 找到所需列之前的逗号
int getStart(char** addresses, int index)
{
int i = 0;
int count = 0;
for(i=0;i < strlen(addresses[index]); i++)
{
if(addresses[index][i] == ',')
count += 1;
if(count == 3)
return i+1;
}
}
getStop 找到所需列末尾之前的逗号
int getStop(char** addresses, int index)
{
int i = 0;
int count = 0;
for(i=0;i < strlen(addresses[index]); i++)
{
if(addresses[index][i] == ',')
count += 1;
if(count == 4)
return i;
}
}
getSubject 获取开始和结束之间的所有字符,并将它们放入一个数组中(这是我 return 到 main 所需要的)
char* getSubject(char** addresses, int index)
{
int i = 0;
int start;
int stop;
char* final;
char subject[10];
start = getStart(addresses, index);
stop = getStop(addresses, index);
for(start; start<stop; start++)
{
subject[i] = addresses[index][start];
i++;
}
final = subject;
printf("%s %s\n", final, subject);
return final;
}
我知道函数工作的方式是
printf("%s %s\n", final, subject);
打印正确的值,但是当我在 main 中调用它时如下所示:
char* test;
test = getSubject(addresses, 43);
printf("%s\n", test);
test 打印一个空白值。这是为什么?
你让 final
指向 local 数组 subject
,然后 return 那个指针。这意味着您实际上 return 指向本地 subject
数组的指针,该数组一旦函数 returns 就超出范围,给您留下一个杂散指针和 undefined behavior.
最后的字符串需要分配内存,一般有两种方式:
使用例如
strdup
在函数中分配内存和 return 指向新内存的指针。传入一个指向足够内存缓冲区的指针作为函数的参数,并将字符串复制到该缓冲区。
您正在 return 指向堆栈变量的指针,您不能那样做。一旦你return,堆栈就会被清除。复制
return strdup(final);
调用完成后必须释放它