c-如何对char字符串/数组使用malloc()函数



我正在编写一个读取字符列表的代码(使用重定向),但我存储字符的字符串的大小为41。字符数与数组的大小不接近,因此我需要使用malloc()来获得确切的数组大小。当我在不使用malloc函数的情况下打印数组时,is会将符号和其他胡言乱语与字符串一起打印。我需要对字符串进行malloc,这样符号和胡言乱语就不会被包括在内。

代码:

#include <stdio.h>
#include <stdlib.h>
int main() {
    char c;
    char r1[41];
    int a = 0;
    while(scanf("%c", &c) != EOF) {
        if(c >= 'A' && c <= 'Z' || c == '[' || c == '.' || c == '!') {
        r1[a] = c;
        a++;
        }
    }
    printf("nThe string is: %sn", r1);
return 0;
}

输出:

The string is TR[!.DFQ▒ ▒ ▒ 這

这里有几个混淆点。

  1. 您的代码打印胡言乱语的原因并不是因为固定长度与可变长度。切换到malloc()并不能解决这个问题。确保字符串末尾有一个空终止符(''):

    while(scanf("%c", &c) != EOF) {
        ...
    }
    r1[a] = '';
    
  2. 您的原始代码混合了数组和指针语法。对于单个字符串,应该使用char[]char*,但不能同时使用两者。

    对于固定大小的字符串,将其声明为:

    char string[40+1];
    

    对于可变长度的字符串,执行:

    char *string = malloc(length + 1);
    if (string == NULL) {
        fprintf(stderr, "malloc failedn");
        exit(EXIT_FAILURE);
    }
    // memory allocation successful
    
char *string[40+1];

这将string定义为指向char的41个指针的数组。如果你想让它容纳一个字符串,你会想把它定义为:

char string[40+1];

如果您知道(在运行时,但不在编译时)字符串的长度,则可以使用malloc,但您需要将结果分配给类型为char*:的单个指针

char *s = malloc(len + 1);
if (s == NULL) {
    /* malloc failed, handle the error */
}

这使得CCD_ 8指向CCD_ 9的阵列的第一个(第0个)元素。该数组尚未初始化,因此您需要将一些数据复制到其中

完成后,假设内容正确地以null结尾,然后您可以使用打印字符串的值

printf("The string is: "%s"n", string);

comp.lang.cFAQ是这类事情的一个很好的资源。

相关内容

  • 没有找到相关文章

最新更新