C:将许多字符插入malloc生成的字符串中

时间:2017-07-01 14:35:38

标签: c string

我在教程中读到这是创建字符串的有效方法:

char *ptr_to_str = malloc( sizeof(*ptr_to_str) * 256 );

但是如何用字符串填充此变量?

*ptr_to_str = 'a';

成功将第一个字符更改为“a”。我可以像这样打印字符串:

printf("%s",ptr_to_str);

输出:

a

但是当我尝试更改下一个字符时,就像这样:

*ptr_to_str[1]= 'b';

我收到错误“间接需要指针操作数('int'无效)。

这里出了什么问题,怎样才能成功地将多个字符串插入*ptr_to_str

3 个答案:

答案 0 :(得分:0)

正如错误所说

  

间接需要指针操作数('int'无效)。

此处ptr_to_str[1]是位置pt_to_str + 1的值,您在*之前放置*ptr_to_str[1] = 'b'(间接),这是无效的,因为*需要指向不使用int / char值的指针。

然后将代码修改为ptr_to_str[1] = 'b';

  

现在如何用字符串填充此变量?

您可以使用fgets(ptr_to_str, size, stdin);或for循环手动初始化数组;

pt_to_string = malloc(size + 1); // declare 1 extra memory for null terminatior.
for(i = 0; i < size; i++) {
    ptr_to_string[i] = 'a'; // some char
}
ptr_to_string[size] = '\0';

您还可以使用strcpy将另一个字符串的值复制到char数组中:

strcpy (ptr_to_string, "copy string");

答案 1 :(得分:-1)

删除*并不意味着什么

ptr_to_str[1]= 'b';

你基本上是在非指针类型上应用dereference运算符,这就是编译器抛出错误的原因。

让我们分开你感到困惑的下一行:

*ptr_to_str[1] = 'b'

char c = ptr_to_str[1];

*c = 'b' //错误,因为您现在解除引用非指针类型,因为c本身就是一个char类型。

当然,如果你问的话,你可以用以下代码创建一个字符串:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[])
{
    char *ptr_to_str = (char *)malloc( sizeof(char) * 256 ),temp,ignore;
    int i=0,len=5;
    for(i=0;i<len;i++)
    {
        scanf("%c",&temp);
        scanf("%c",&ignore); // just ignore this line as it will be automatically skipped. 
        ptr_to_str[i] = temp;
        ptr_to_str[i+1] = '\0'; // never forget to end the string with null character
        printf("string so far : %s\n",ptr_to_str);
    }
    return 0;
}

答案 2 :(得分:-2)

*ptr_to_strptr_to_str[0]相同。所以

ptr_to_str[1] = 'b';

这意味着从ptr_to_str的地址偏移+1。所以你可以用:

1[ptr_to_str] = 'b';