如何在C语言中自动定义字符串长度?
我试图在C中反转字符串,但在定义目标字符串时遇到了一些问题 以下是我的想法:(我是一个初学者,所以我的想法在你看来可能很可笑…)如何在C语言中自动定义字符串长度?,c,string,C,String,我试图在C中反转字符串,但在定义目标字符串时遇到了一些问题 以下是我的想法:(我是一个初学者,所以我的想法在你看来可能很可笑…) 我定义了一个长度未知的字符串数据类型,并为其分配了一个字符串。(在我的例子中是str1) 我得到字符串1的字符串长度,增加这个值,然后分配给一个整数。(在我的例子中为l,+1用于补偿字符串末尾的“\0”) 使用此l整数定义作为目标字符串的新字符串。(在我的例子中是str2。) 使用for循环从str1的结尾复制到str2的开头,并在str2的结尾添加“\0”使其成为字
#include<stdio.h>
#include<string.h>
int main()
{
/* Reversing a string! */
int l; /* Length of str1 +1 (for the NULL character) */
char str1[] = "This is an unknown length string!";
l = strlen(str1) + 1;
char str2[l]; /* The destination string */
int i, j;
for (i = strlen(str1)-1,j=0; i < strlen(str1) && i >= 0; i--,j++)
str2[j] = str1[i];
str2[j] = '\0';
/* Display str1 and str2 */
printf("The content of str1: %s\n", str1);
printf("The content of str2: %s\n", str2);
return 0;
}
#包括
#包括
int main()
{
/*倒弦*/
int l;/*str1+1的长度(对于空字符)*/
char str1[]=“这是长度未知的字符串!”;
l=strlen(str1)+1;
char str2[l];/*目标字符串*/
int i,j;
对于(i=strlen(str1)-1,j=0;i=0;i--,j++)
str2[j]=str1[i];
str2[j]='\0';
/*显示str1和str2*/
printf(“str1的内容:%s\n”,str1);
printf(“str2的内容:%s\n”,str2);
返回0;
}
Visual studio不支持混合类型声明和可变长度数组。您需要以C89样式声明所有变量,即在
main
中的代码开头。并为str2动态分配空间
size_t l; /* Length of str1 +1 (for the NULL character) */
int i, j;
char str1[] = "This is an unknown length string!";
l = strlen(str1) + 1;
char *str2;
str2 = malloc(l);
一种不需要动态内存分配的替代方案。它在这种情况下工作,但它不是一个通用的解决方案(例如,您不能明智地使用它来反转任意数量的不同长度的字符串,而您可以使用
malloc()
和free()
来处理该问题)。您的原始代码使用VLA-可变长度数组-这在C99中是标准的,在C11中可以选择支持
#include <stdio.h>
int main(void)
{
/* Reversing a string! */
char str1[] = "This is an unknown length string!";
char str2[sizeof(str1)];
int len = sizeof(str1);
int i, j;
for (i = len - 2, j = 0; i >= 0; i--, j++)
str2[j] = str1[i];
str2[j] = '\0';
/* Display str1 and str2 */
printf("The content of str1: %s\n", str1);
printf("The content of str2: %s\n", str2);
return 0;
}
#包括
内部主(空)
{
/*倒弦*/
char str1[]=“这是长度未知的字符串!”;
字符str2[sizeof(str1)];
int len=sizeof(str1);
int i,j;
对于(i=len-2,j=0;i>=0;i--,j++)
str2[j]=str1[i];
str2[j]='\0';
/*显示str1和str2*/
printf(“str1的内容:%s\n”,str1);
printf(“str2的内容:%s\n”,str2);
返回0;
}
使用size\u t
而不是int
,因为数组长度更便于携带。别忘了免费(str2)代码>使用此技术。诚然,在一个即将退出的程序中,这并不重要,但最好从一开始就养成良好的习惯,在不再需要时释放分配的内存肯定是一个好习惯。