错误如何在C中打印char数组

时间:2015-04-26 13:10:02

标签: c

#include<stdio.h>
#include<string.h>

int main(int argc, char*argv[]){
    char buffer[256];
    strcpy(buffer, "see");
    int size = strlen(buffer);
   for(int i = 0; i < size; i++, size--){
      char temp = buffer[i];
      buffer[i] = buffer[size];
      buffer[size] = temp;
   }
   printf("Inversa %s\n",buffer);

}

代码不打印任何东西,我不知道为什么。如果有人可以帮助我

5 个答案:

答案 0 :(得分:1)

由于您的i取决于size,请不要修改它,而是采用另一个变量,比如l,然后使用它。此外,字符串的大小将从0size-1

#include<stdio.h>
#include<string.h>

int main(int argc, char*argv[]){
char buffer[256];
strcpy(buffer, "see");

int size = strlen(buffer);
int l=size-1;
 for(int i = 0; i < size/2; i++, l--){
      char temp = buffer[i];
  buffer[i] = buffer[l];
  buffer[l] = temp;

 }
 printf("Inversa %s\n",buffer);

}

答案 1 :(得分:1)

如前所述,buffer[size]包含空字符。使用当前代码,您可以使用空值填充buffer。此外,要反转数组元素,您应该循环转到size/2而不是size。要反转数组中的字符,您可以使用以下简单代码

#include<stdio.h>
#include<string.h>

int main(int argc, char*argv[]){
    char buffer[256];
    strcpy(buffer, "see");
    int size = strlen(buffer);
   for(int i = 0; i < size/2; i++){
      char temp = buffer[i];
      buffer[i] = buffer[size-1-i];
      buffer[size-1-i] = temp;
   }
   printf("Inversa %s\n",buffer);
}

答案 2 :(得分:0)

因为C中的字符串以\0结尾,所以在for循环中你将它推到第一个开头 这可能没问题(但没有经过测试)

  char temp = buffer[i];
  buffer[i] = buffer[size-1];
  buffer[size-1] = temp;

答案 3 :(得分:0)

只需将代码的第10行和第11行更改为:

int list

原因是因为变量'size'的值是3.所以当你访问buffer [size]时,它指向buffer [3],它是字符串终止字符'\ 0'。缓冲区仅填充到缓冲区[2]。 示例:

buffer[i] = buffer[size-1];
buffer[size-1] = temp;

buffer [3]标记字符串的结尾。

答案 4 :(得分:0)

您的代码中只有一个错误(无法访问数组,缓冲区[3])。

您需要更改一行:

int size = strlen(buffer);

int size = strlen(buffer)-1;

或使用buffer[size-1]代替buffer[size]

相关问题