首页 文章

指向不存储数据的字符串的指针数组

提问于
浏览
0

我试图将文本文件中的单词存储在动态分配的字符数组中 . 我使用指针数组到字符数组,以便动态分配内存但由于某种原因,它只将最后一个输入字存储到我指向的所有字符数组中,即使在某些地方字符串不适合我分配较小字符串的空间 .

这是代码:

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

int main () {
    char input_string[30];
    int string_length, text_length;

    // Calculating number of words in text file.
    text_length=0;
    freopen("in.txt", "r", stdin);
    while (scanf("%s", &input_string)!=EOF) {
        text_length++;
    }
    freopen("CON", "r", stdin);

    // Dynamically assigning array of chars to store words
    char **pointer;
    int i;
    pointer=(char*)calloc(text_length, sizeof(char));
    freopen("in.txt", "r", stdin);
    for  (i=0;i<text_length;++i) {
        scanf("%s", &input_string);
        string_length = strlen(input_string);
        pointer[i]=(char*)calloc(string_length, sizeof(char));
        *(pointer+i)=input_string;
    }
    for (i=0;i<text_length;++i) {
        printf("%s ", *(pointer+i));
    }
    freopen("CON", "r", stdin);
    return 0;
}

1 回答

  • 0

    *(指针i)= input_string

    这里input_string是数组,它从文件中获取字符串 . 因此在上面的语句中,您将使用输入字符串覆盖指针数组(已分配的内存)的地址 .

    pointer [i] =(char *)calloc(string_length,sizeof(char)); // alloacted memory

    (指针i)= input_string; //同名的内存覆盖此处指针[i]和(指针i)都通知相同

    因此,数组的每个索引都具有相同的input_string基址,而取消引用它将给出数组中存在的字符串(最后一个字符串) . 这就是你的问题的原因 . 你做得更好memcpy或strcpy .

    pointer [i] =(char *)calloc(string_length,sizeof(char)); strcpy(pointer [i],input_string)

    要么

    pointer [i] =(char *)calloc(string_length,sizeof(char)); memcpy(pointer [i],input_string,string_length)); ((指针i)string_length)= '\0'; / 在字符串末尾分配空字符 /

相关问题