gpt4 book ai didi

构造 char 指针数组

转载 作者:行者123 更新时间:2023-11-30 17:38:17 27 4
gpt4 key购买 nike

我在将 getchar() 的输入放入 char *arr[] 数组时遇到问题。我这样做的原因是因为输入数据(将是一个带有命令行参数的文件)将存储在一个 char 指针数组中以传递给 execvp 函数。

我使用 getchar() 是为了以后可以实现一个功能,允许用户按下“tab”按钮并尝试将文件与已输入的文本进行匹配。

执行以下程序后,我输入: ls -a(尾随空格)

显然应该运行但没有运行,我收到 SEG 11 错误。如果有人能指出我做错了什么,那就太好了!!

谢谢。

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>

int main(){

char *arr[10];
int l_count = 0, w_count = 0;
char c;
char *curLine;
curLine = (char*)calloc(10, sizeof(char));
while((c=getchar()) != '\n'){
if (isspace(c)){
curLine[l_count]='\0';
memcpy(arr[w_count],curLine,strlen(curLine));
++w_count;
l_count=0;
}
else{
curLine[l_count]=c;
++l_count;
}
}
arr[w_count]='\0';

// Testing
int i;
for (i=0;i<2;i++){
printf("%s, ", arr[i]);
}
printf("\n");

return 0;
}

最佳答案

实际上你想要这个:

int main(){
char *arr[10];
int l_count = 0, w_count = 0;
char c;
char *curLine;

curLine = (char*)calloc(10, sizeof(char));

while (1)
{
c = getchar() ;
if (isspace(c)){
curLine[l_count]='\0';
arr[w_count] = curLine ;
++w_count;
l_count=0;
curLine = calloc(10, sizeof(char));
if (c == '\n')
break ;
}
else{
curLine[l_count]=c;
++l_count;
}
}

// Testing
int i;
for (i = 0; i < w_count; i++){
printf("%s, ", arr[i]);
}
printf("\n");

// free memory
for (i = 0; i < w_count; i++){
free(arr[i]);
}

return 0;
}

这里我们还在最后释放了内存,这是一个很好的做法,即使程序无论如何都在那里结束。

即使还有更多检查需要完成,该程序也能正常工作,例如,如果您输入超过 9 个字符的单词,它就会溢出 calloc 分配的内存,并且如果您输入更多字符超过 10 个单词将会溢出长度为 10 的 arr 数组。

顺便说一句,在 C 中,您不会转换 callocmallocrealloc 的返回值。

关于构造 char 指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22169490/

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