在c中操作字符数组作为字符串

时间:2013-09-08 07:00:58

标签: c++ c arrays string

我已经读过将字符串存储在一个字符数组中(使用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”?

6 个答案:

答案 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'。