假设我有一个char * str,我想使用指针和递增逐个分配字符?
我做完了:
char *str;
char c = 'a';
*str++ = c;
但它不起作用。
我该怎么做?
答案 0 :(得分:3)
str
只是一个指针。它没有指向任何有效的位置(特别是对于你可以写入的某些内存)。一个简单的可能性就是让它指向一个数组:
char buf[1024] = {0}; // room for 1024 chars (or 1023 + a 0 byte for a string)
char *str = buf;
char c = 'a';
*str++ = c;
答案 1 :(得分:2)
char *str
是指向char(或字符数组)的指针,但是,您从未分配过它。如前所述,char *
基本上是说"去那里"但那里没有,你从来没有给它一个价值。您首先需要使用malloc
来创建空间以放入内容。这是一个示例
char *str = malloc(sizeof(char)*10) //allocate space for 10 chars
char c = 'a';
str[0] = c;
没有对malloc进行错误检查,您应该在自己的程序中执行此操作。你也可以这样做
char str[10];
char c = 'a';
str[0] = c;
然而,使用此方法,您将被限制为10个字符,并且您无法更改该数量,使用上一个方法,您可以使用realloc
来获得数组中更多或更少的空间。
答案 2 :(得分:1)
但它不起作用。
parent.nameOfGlobalHere
...未初始化为任何内容,因此取消引用它是未定义的行为。如果它在初始化的地方,那么在表达式char* str;
中,str ++是一个后增量运算符,它在递增原始数据时返回指针的副本。结果是复制指向前一个,因此前一个指针所指向的是c。
你指的哪个部分不起作用?
修改强>
正如其中一条评论所述,副本并未真正返回,但在评估后,该值会增加。
答案 3 :(得分:1)
作为具有自动存储持续时间的变量,指针str
具有不确定的值。如果它具有静态存储持续时间,则其值将为NULL。所以你可能不会使用这样的指针来存储数据。
您的意思可以通过以下方式查找
#include <stdio.h>
int main( void )
{
char s[11];
char *p = s;
while (p != s + sizeof( s ) / sizeof( *s ) - 1 ) *p++ = 'a';
*p = '\0';
puts(s);
return 0;
}
程序输出
aaaaaaaaaa
在程序中,p
类型的指针char *
由数组s
的第一个字符的地址初始化。
因此这句话在循环中使用
*p++ = 'a';
使用字符'a'
按顺序填充数组。
下一个例子更有趣
#include <stdio.h>
char * copy_string(char *dsn, const char *src)
{
for (char *p = dsn; (*p++ = *src++) != '\0'; )
{
// empty body
}
return dsn;
}
int main( void )
{
char *src = "Hi QBl";
char dsn[7];
puts(copy_string(dsn, src));
return 0;
}
程序输出
Hi QBl
这是一个函数的演示,该函数使用指针将包含字符串的一个字符数组复制到另一个字符数组中。