#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);
}
代码不打印任何东西,我不知道为什么。如果有人可以帮助我
答案 0 :(得分:1)
由于您的i
取决于size
,请不要修改它,而是采用另一个变量,比如l
,然后使用它。此外,字符串的大小将从0
到size-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]