c - 为什么不打印我的 char 数组指针?

标签 c linux pointers printf

我被分配了用 C 语言编写生产者/消费者程序的任务。生产者过程方法如下所示,它试图从用户输入的字符串 (producerString) 中捕获元音。但是,我无法测试是否正确创建了 vowelString

我确定该方法运行完成,但在执行第二个 printf 时没有打印任何内容。它与我如何打印指针有关吗?

char * Producer(char producerString[])          //PRODUCER FUNCTION
{
        char *vowelString = (char *) malloc(sizeof(char) * 100);
        vowelString = "";                       //String used to append vowels to

        printf("In Producer with producerString = %s\n", producerString);

        for (int i = 0; producerString[i] != '\0'; i++)
        {
                if (producerString[i] == 'a' || producerString[i] == 'e' || producerString[i] == 'i' || producerString[i] == 'o' || producerString[i] == 'u' || producerString[i] == 'y')
                {
                        int len = strlen(vowelString);
                        vowelString[len] = i;
                        vowelString[len + 1] = '\0';
                }
                else if (producerString[i] == 'p')
                {
                        exit(0);
                }
        }

        printf("In Producer with vowelString = %s\n", vowelString);

        return vowelString;                     //Return vowels string
}

我也尝试在从 Producer 方法返回后在 Main 方法中打印它,方法如下:

char *producedString = Producer(inString);

printf("The produced string: %s\n", producedString);

这也不起作用,但我认为这是同一问题的结果。

在此先感谢您的帮助,并感谢任何其他提示。

最佳答案

vowelString = ""; 不是您初始化动态分配字符串的方式。这是指派指针指向静态文字字符串,它不再指向 malloc 的内存。文字字符串不可修改,因此当您写入 vowelString[i] 时会导致未定义的行为。

将该行更改为:

vowelString[0] = '\0';

此外,

vowelString[len] = i;

应该是:

vowelString[len] = producerString[i];

但不是每次循环都调用 strlen(),您可以在函数开始时简单地将 len 初始化为 0 , 并在每次添加元音时增加它。

char * Producer(char producerString[])          //PRODUCER FUNCTION
{
    char *vowelString = (char *) malloc(sizeof(char) * 100);

    printf("In Producer with producerString = %s\n", producerString);

    int len = 0;
    for (int i = 0; producerString[i] != '\0'; i++)
    {
        if (producerString[i] == 'a' || producerString[i] == 'e' || producerString[i] == 'i' || producerString[i] == 'o' || producerString[i] == 'u')
        {
            vowelString[len++] = producerString[i];
        }
        else if (producerString[i] == 'p')
        {
            exit(0);
        }
    }
    vowelString[len] = '\0';

    printf("In Producer with vowelString = %s\n", vowelString);

    return vowelString;
}

关于c - 为什么不打印我的 char 数组指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47404017/

相关文章:

c - 链表 : Should the type of pointer "next" and the name of struct be same?

c++ - 在 C++ 中为零大小的分配返回唯一地址的基本原理是什么?

linux - 我们可以在同一个/dev 文件上使用两个 MMAP

Java - foo.charAt(i) 的返回值如何作为引用?

c - 如何检查void指针是否指向NULL?

Linux gvim 与 vim

c - 当 bufferdata 来自堆时,opengl 不会绘制

c - 取消引用指向指针数组的指针

c - 抑制 C++ 代码中的 “printf” 而不是 R 中的 “message” 或 “warning” 显示的消息

php - 共享主机上的 html5 websockets 阻塞其他端口