我在教程中读到这是创建字符串的有效方法:
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
?
答案 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_str
与ptr_to_str[0]
相同。所以
ptr_to_str[1] = 'b';
这意味着从ptr_to_str的地址偏移+1。所以你可以用:
1[ptr_to_str] = 'b';