在c中向指针添加字符串时,访问时不显示任何内容

时间:2016-06-10 08:57:40

标签: c

我已经尝试了一段时间但我无法处理指针数组 例如

char *word;
char *container[100];

在下面的for循环中,我将字符串中的单个字符附加到temp,然后如果出现分隔符,我想添加到* container [100]。

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


int main()
{
    int z = 0;
    int k=0;
    char *word;
    char *container[100];
    char *in = " First Word . Second Word";
    for(k=0; k<strlen(in); k++)  
    {  
        //using . as a delimiter
        if(in[k]=='.')
        {
            container[z] = word;
            printf("%s\n", container[z]); //<---- this prints okey inside loop 
            z++;
            memset(word,0,strlen(word));
        }
        else
        {
            //appending characters to temp, using some method
            snprintf(word + strlen(word), (sizeof word) - strlen(word), "%c", in[k]);
        }
    }
//doesnt print anything outside the loop
printf("Does it print: %s\n", container[0]);
printf("Doest it print: %s\n", container[1]);

    return 0;
}

当我尝试在容器中打印单词时,它不会显示任何内容:

printf("%s\n", container[0]);
printf("%s\n", container[1]);

我想我必须做一些动态分配。但我不知道如何。

1 个答案:

答案 0 :(得分:1)

在开始使用之前,指针word未初始化。这会导致未定义的行为。如果您很幸运,您会遇到分段错误,因此您可以了解问题并进行修复。如果你运气不好有点可行,但会产生奇怪的副作用,比如神秘地覆盖其他变量。

此外,sizeof word返回指针大小,而不是它指向的(已分配)内存区域的大小。

word的问题可以通过将其设为数组来解决:

char word[100];  

现在word包含100个字节的内存,我们可以安全地写入,sizeof word将评估为100

下一个问题是指定container指针指向word。这将复制word中包含的字符串。稍后当您覆盖单词的内容时,container[i]的内容也将被覆盖,因为它将指向同一个内存位置。您可以使用strdup创建动态分配的副本:

container[z] = strdup(word);

注意:strdup()是POSIX函数,不是C规范的一部分。在没有strdup()的平台上,您可以使用malloc + strcpy执行相同的任务。