我已经改写了我以前的程序,我想把脏脏改成**脏。你能给我一些建议吗? 我的代码是:
void clean(char *dirty)
{
int i = 0, j = 0;
char *temp;
temp = strdup(dirty);
if(NULL == temp)
{
printf("strdup(), failed");
return;
}
while(i < strlen(temp))
{
if(isalpha(temp[i]) || isspace(temp[i]) || temp[i] == '?'
|| temp[i] == '.' || temp[i] == '!' || temp[i] == ',')
{
dirty[j] = temp[i];
j++;
}
i++;
}
dirty[j] = '\0';
free(temp);
}
改变了main()的一部分,我遇到了一些问题,我和朋友一起创建了这个:
int main(int argc, char** argv)
{
FILE* fp;
char** tab;
int i = 0;
int lines = 0;
int length = 10;
if(argc != 2)
{
printf("Incorrent syntax! Use ./name_of_program input_file\n");
return 1;
}
if(!(fp = fopen(argv[1],"r")))
{
printf("Could not open the file! Please try again!\n");
return 2;
}
tab = (char**)malloc(length*(sizeof(char*)));
if(!tab)
{
printf("Could not allocate memory!\n");
free(tab);
return 3;
}
while(!feof(fp))
{
tab[i] = getNumber(fp);
if(i >= length)
{
length += 10;
tab = (char**)realloc(tab, sizeof(char*));
if(tab == NULL)
{
free(tab);
return 5;
}
}
if(tab[i] == NULL)
{
printf("Incorrect character in the infile! Terminating\n");
free(tab);
return 4;
...
答案 0 :(得分:0)
不完全确定你的意思。像这样的东西?
void clean(char** dirtyPointer)
{
int i = 0, j = 0;
char* dirty = *dirtyPointer;
...
答案 1 :(得分:0)
根据你想做什么,冷杉,请在主要内容中注明
tab = (char**)realloc(tab, sizeof(char*));
因此,您将10指针数组重新分配到大小为1的指针数组中。似乎不正确(realloc将给定指针分配的内存更改为提供的大小,如果提供更多,如length * sizeof。 ..你会增加数组大小,你不要只是丢失所有数据。
现在,如果要将“clean”函数应用于字符串数组(char *),则应包括数组的当前最大大小。我会更快地建议你。
void clean_All(char ** strings, int size)
{
int i;
if (strings == NULL)
return;
for(i = 0; i < size; i++) {
if (strings[i] == NULL)
return;
clean(strings[i]);
}
return;
}