我已经读过将字符串存储在一个字符数组中(使用null终止)允许稍后操作字符串(与指向字符串文字的指针不同)。
#include <stdio.h>
int main()
{
char s[10]="Stack";
s[9]='a'; // a gets stored in array and if index is less than 6 string gets changed
printf("%s\n",s);
return 0;
}
输出:堆叠
只要要操作的索引小于字符串的长度,这就可以工作。
这意味着即使有空格,也无法更改字符串内容(因此大小)?
是否有任何直接的方式(不使用函数)在所需位置添加“a”?
答案 0 :(得分:6)
printf
只会在 NUL-terminator之前打印字符串的字符。
设置s[9]='a';
后, s 的内容将变为:
{'S', 't', 'a', 'c', 'k', '\0', '\0', '\0', '\0', 'a'}
如果你打印s[9]
,它就在那里:
printf("%c", s[9]);
查看std::string。
答案 1 :(得分:3)
您始终可以在该位置添加'a'
,但用于打印字符串的函数需要不同。 printf
遇到'\0'
字符后停止打印。你可以使用像这样的函数
for (i = 0; i < len_of_str; i++)
{
if (str[i] == '\0')
continue;
printf("%c", str[i]);
}
答案 2 :(得分:3)
“这意味着即使有空的空间也无法更改字符串内容(因此大小)?”您当然可以更改字符串conent(也称为单个字符),但您无法更改数组中的存储大小(元素数量,在本例中为字符数)。因为一旦你定义了数组(在这种情况下,s),C就会为它分配那么多的存储空间,你不能对分配空间之外的内存做出任何假设。
“有没有直接的方法(不使用函数)在所需的位置添加'a'?”。是的,直接分配它。约束条件是您不应超出存储空间(不包括NUL字符)。例如,您可以轻松地执行“s [2] ='u';”输出将是“Stuck”而不是“Stack”。
答案 3 :(得分:2)
在“stack”设置为s [10]之后,s [0] ='s',s [1] = [t] ... s [4] ='k',s [5] =' \ 0' 。 在C和C ++中,当char数组以字符串格式打印时,无论为数组分配多少内存,字符串的长度都等于'\ 0'的索引。
答案 4 :(得分:1)
快速回答是“不”你不能简单地通过
来改变字符数组的大小arr[size+1] = 'a';
因为你不能以同样的方式改变整数数组的大小。
但您可以使用带有char *
的动态字符串并使用malloc
函数
答案 5 :(得分:1)
我改变了你的代码并且它工作正常。
#include<stdio.h>
using namespace std;
int main()
{
char s[10]="Stack";
s[8]='a'; // a gets stored in array and if index is less than 6 string gets changed
s[5]='n';
s[9]='\0';
printf("%s\n",s);
return 0;
}
输出:不打印stackn //'\ 0'字符不打印 首先取出s [5]位置中的空字符'\ 0'并替换为字符,以便您可以将字符插入数组中
其次,s [10]表示0-9,所以用s [8] ='a'替换你的代码s [9] ='a',因为打印字符串你必须在s [9]处写入空字符= '\ n'。