1

我已经读过将字符串存储在字符数组中(带有空终止)允许稍后操作字符串(与具有指向字符串文字的指针不同)。

#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”?

4

6 回答 6

6

printf只会在NUL 终止符之前打印字符串的字符。 当你设置时, ss[9]='a';的内容变为:

{'S', 't', 'a', 'c', 'k', '\0', '\0', '\0', '\0', 'a'}

如果你打印s[9],它就在那里:

printf("%c", s[9]);

看看std::string

于 2013-09-08T07:10:56.243 回答
3

您始终可以'a'在该位置添加和,但用于打印字符串的函数需要不同。printf遇到'\0'字符后停止打印。您可以使用这样的功能

for (i = 0; i < len_of_str; i++)
{
    if (str[i] == '\0')
         continue;
    printf("%c", str[i]);
}
于 2013-09-08T07:09:31.410 回答
3

“这意味着即使有空白空间也无法更改字符串内容(以及因此大小)?” 您当然可以更改字符串内容(也称为单个字符),但不能更改数组中的存储大小(元素数,在本例中为字符数)。由于一旦定义了数组(在本例中为 s),C 就会为其分配那么多存储空间,并且您无法对分配空间之外的内存做出任何假设。

“有没有直接的方法(不使用函数)在所需的位置添加'a'?”。是的,直接赋值。约束是您不应超出存储空间(不包括 NUL 字符)。例如,您可以轻松地执行“s[2]='u';” 并且输出将是“Stuck”而不是“Stack”。

于 2013-09-08T07:11:07.590 回答
2

"stack" 设置为 s[10] 后,s[0]='s', s[1]=[t]...s[4]='k', s[5]='\0' . 在 C 和 C++ 中,当将 char 数组打印为字符串格式时,字符串的长度等于 '\0' 的索引,而不管为数组分配了多少内存。

于 2013-09-08T07:11:36.793 回答
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插入字符了

其次, s[10] 表示 0-9,因此将代码 s[9]='a' 替换为 s[8]='a' 因为要打印字符串,您必须在 s[9]='\ n'。

于 2013-09-08T07:17:15.767 回答
1

快速的答案是“不”,你不能简单地改变字符数组的大小

arr[size+1] = 'a';

因为您不能以相同的方式更改整数数组的大小。但是您可以使用动态字符串char *并将内存分配给正在使用的malloc函数

于 2013-09-08T07:11:49.287 回答