c - 函数未返回正确的 char** 指针

标签 c arrays function

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

//function to change char to upper case
char upper(char ch)
{
    if (ch >= 'a' && ch <='z')
        return ch - ('a'-'A');
    else
        return ch;
}

//Function to find words starting with letter and return array of string words
char **find_words(char *str,char letter, int *size)
{
    char **str_arr=NULL;
    int i=0,j=0;
    int ch;
    int len;


    while (str[j] != NULL)
    {
        ch = str[j];
        while (ch !=' ' && ch !=NULL)
            ch = str[j++];

        str[j-1]=NULL;

        ch = upper(str[i]);
        if ( ch == upper(letter))
        {
            (*size)++;
            str_arr = (char **)realloc(str_arr,(*size)*sizeof(char *));
            len = strlen(&str[i]);
            str_arr[*size] = (char *)malloc((len+1)*sizeof(char));

            strcpy(str_arr[*size],&str[i]);
            printf("\n%s",str_arr[*size]);
        }   
        i=j;
    }

    return str_arr;
}


//Main program to check function find words
void main()
{
    char** str_array=NULL;
    int i,j;
    int size=0;
    char str[] = "Good night go to sleep, Goodman";
    char letter ='g';

    str_array = find_words(str,letter,&size);

    /*
    for (i = 0; i < size; i++)
    {
        printf("\n%s",str_array[i]);
    }
    */

    printf("\n");
}

函数find_words工作并从动态字符串数组中打印单词列表,但在主程序中返回的指针char **str_arr变为空。

这是什么原因呢?我该如何解决这个问题?

最佳答案

我认为您的代码在增加大小方面存在问题。后递增可能会解决您的问题。

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



//function to change char to upper case
char upper(char ch)
{
    if (ch >= 'a' && ch <='z')
        return ch - ('a'-'A');
    else
        return ch;
}

//Function to find words starting with letter and return array of string words
char **find_words(char *str,char letter, int *size)
{
    char **str_arr=NULL;
    int i=0,j=0;
    int ch;
    int len;


    while (str[j] != NULL)
    {
        ch = str[j];
        while (ch !=' ' && ch !=NULL)
            ch = str[j++];

        str[j-1]=NULL;

        ch = upper(str[i]);
        if ( ch == upper(letter))
        {

            str_arr = realloc(str_arr,(*size+1)*sizeof(char *));
            len = strlen(&str[i]);
            str_arr[*size] = malloc((len+1)*sizeof(char));

            strcpy(str_arr[*size],&str[i]);
            printf("\n%s",str_arr[*size]);
            //little change here
            (*size)++;
        }   
        i=j;
    }

    return str_arr;
}


//Main program to check function find words
void main()
{
    char** str_array=NULL;
    int i,j;
    int size=0;
    char str[] = "Good night go to sleep, Goodman";
    char letter ='g';

    str_array = find_words(str,letter,&size);


    for (i = 0; i < size; i++)
    {
        printf("\n%s",str_array[i]);
    }

    printf("\n");
}

关于c - 函数未返回正确的 char** 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47091391/

相关文章:

c++ - 该递归函数如何工作?

arrays - 创建一个用于在 Swift 中打印出玩家姓名和分数的 for-in 循环

c++ - Const 与数组到指针的转换

java - 从字符串中获取 x 值

javascript - 单行辅助函数上是否可以有或是否有 Javascript addEventListener 多个参数?

c++ - 查找填充区域的矩形大小

c - 为什么不能将指针分配给 C 中的数组?

javascript - typeof 2D 数组将变为 String。为什么?

c - 初学C循环函数

c - 我想知道我的字符串中是否有数字或者只是字母?编程