C 如何修复我的代码,将字符串大小减少到“0”;“有效尺寸”;
我想做一个代码,读取一个字符串,然后把这个字符串转换成一个新的字符串,长度等于原始字符串的有效长度,也就是说C 如何修复我的代码,将字符串大小减少到“0”;“有效尺寸”;,c,scanf,fgets,c-strings,strlen,C,Scanf,Fgets,C Strings,Strlen,我想做一个代码,读取一个字符串,然后把这个字符串转换成一个新的字符串,长度等于原始字符串的有效长度,也就是说 old string = stringi new string = stringii newstring[strlen(stringi)+1] (where +1 is for the terminator '\0' 我对两个字符串(字符串1和字符串2)执行此操作,最后打印strlen(string1),strlen(string2),并打印string11和str
old string = stringi
new string = stringii
newstring[strlen(stringi)+1] (where +1 is for the terminator '\0'
我对两个字符串(字符串1和字符串2)执行此操作,最后打印strlen(string1)
,strlen(string2)
,并打印string11和string22
(以查看其是否工作)
嗯,有什么问题吗?程序编译正确
但如果我为字符串1键入“sugar”,为字符串2键入“sugara”,它将返回:
糖
苏格拉
或者,如果我键入batata和cenoura,它将返回:
巴塔塔'
塞诺拉
或者,如果我键入cenoura和batata,它将返回:
塞诺拉
巴塔塔'
我不知道这个问题的动机是什么。如果有人能帮我搜索代码中的bug(或者建议另一种解决问题的方法)
#包括
#包括
#包括
int main()
{
//这里我创建了两个大小为100的字符串
字符string1[100],string2[100];
//在这里,我要求用户键入两个短语,并使用gets存储它们
printf(“键入两个短语):\n”);
获取(string1);
获取(string2);
//在这里,我创建了两个新字符串,其大小由strlen(stringi)+1给出
字符串11[strlen(string1)+1];
字符串22[strlen(string2)+1];
//对于字符串1,我将原始字符串的所有值分配给新字符串,直到“\0”
对于(int i=0;string1[i]!='\0';i++)
{
string11[i]=string1[i];
}
//这里我用终止符表示新字符串的最后一个位置
string11[strlen(string1)+1]='\0';
//我对字符串2也这样做
对于(int i=0;string2[i]!='\0';i++)
{
string22[i]=string2[i];
}
string22[strlen(string2)+1]='\0';
//我打印原始字符串和新字符串的长度
printf(“长度字符串1=%d长度字符串2=%d\n”、strlen(string1)、strlen(string2));
printf(“%s\n%s\n”,string11,string22);
系统(“暂停”);
返回0;
}
这些语句
string11[strlen(string1)+1] = '\0';
tring22 [strlen(string2)+1] = '\0';
你错了
你必须写作
string11[strlen(string1)] = '\0';
tring22 [strlen(string2)] = '\0';
printf("length string 1 = %zu length string 2 = %zu\n", strlen(string1), strlen(string2));
这个电话也错了
printf("length string 1 = %d length string 2 = %d\n", strlen(string1), strlen(string2));
你必须写作
string11[strlen(string1)] = '\0';
tring22 [strlen(string2)] = '\0';
printf("length string 1 = %zu length string 2 = %zu\n", strlen(string1), strlen(string2));
请注意,函数get
不再是标准的C函数。改用fgets
比如说
fgets( string1, sizeof( string1 ), stdin );
string1[ strcspn( string1, "\n" ) ] = '\0';
这些声明
string11[strlen(string1)+1] = '\0';
tring22 [strlen(string2)+1] = '\0';
你错了
你必须写作
string11[strlen(string1)] = '\0';
tring22 [strlen(string2)] = '\0';
printf("length string 1 = %zu length string 2 = %zu\n", strlen(string1), strlen(string2));
这个电话也错了
printf("length string 1 = %d length string 2 = %d\n", strlen(string1), strlen(string2));
你必须写作
string11[strlen(string1)] = '\0';
tring22 [strlen(string2)] = '\0';
printf("length string 1 = %zu length string 2 = %zu\n", strlen(string1), strlen(string2));
请注意,函数get
不再是标准的C函数。改用fgets
比如说
fgets( string1, sizeof( string1 ), stdin );
string1[ strcspn( string1, "\n" ) ] = '\0';
您好,在表长度初始化时,您不需要用1递增
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
//Here I create two strings with size 100
char string1[100], string2[100];
//Here I ask for the user to type two phrases and store them using gets
printf("Type two phrases):\n");
gets(string1);
gets(string2);
//Here I create two new strings with size given by strlen(stringi)+1
char string11[strlen(string1)];
char string22[strlen(string2)];
//For string 1, I atrribute all the values of the original string to the new string, until '\0'
for (int i = 0; string1[i] != '\0'; i++)
{
string11[i] = string1[i];
}
//Here I denote the last position of the new string with the terminator
string11[strlen(string1)] = '\0';
//I do the same for string 2
for (int i = 0; string2[i] != '\0'; i++)
{
string22[i] = string2[i];
}
string22 [strlen(string2)] = '\0';
//I print the length of the original strings and the new strings
printf("length string 1 = %d length string 2 = %d\n", strlen(string1), strlen(string2));
printf("%s\n%s\n", string11, string22);
system("pause");
return 0;
}
#包括
#包括
#包括
int main(){
//这里我创建了两个大小为100的字符串
字符string1[100],string2[100];
//在这里,我要求用户键入两个短语,并使用gets存储它们
printf(“键入两个短语):\n”);
获取(string1);
获取(string2);
//在这里,我创建了两个新字符串,其大小由strlen(stringi)+1给出
字符串11[strlen(string1)];
char string22[strlen(string2)];
//对于字符串1,我将原始字符串的所有值分配给新字符串,直到“\0”
对于(int i=0;string1[i]!='\0';i++)
{
string11[i]=string1[i];
}
//这里我用终止符表示新字符串的最后一个位置
string11[strlen(string1)]='\0';
//我对字符串2也这样做
对于(int i=0;string2[i]!='\0';i++)
{
string22[i]=string2[i];
}
string22[strlen(string2)]='\0';
//我打印原始字符串和新字符串的长度
printf(“长度字符串1=%d长度字符串2=%d\n”、strlen(string1)、strlen(string2));
printf(“%s\n%s\n”,string11,string22);
系统(“暂停”);
返回0;
}
祝您好运。您好,在表格长度初始化时,您不需要用1递增
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
//Here I create two strings with size 100
char string1[100], string2[100];
//Here I ask for the user to type two phrases and store them using gets
printf("Type two phrases):\n");
gets(string1);
gets(string2);
//Here I create two new strings with size given by strlen(stringi)+1
char string11[strlen(string1)];
char string22[strlen(string2)];
//For string 1, I atrribute all the values of the original string to the new string, until '\0'
for (int i = 0; string1[i] != '\0'; i++)
{
string11[i] = string1[i];
}
//Here I denote the last position of the new string with the terminator
string11[strlen(string1)] = '\0';
//I do the same for string 2
for (int i = 0; string2[i] != '\0'; i++)
{
string22[i] = string2[i];
}
string22 [strlen(string2)] = '\0';
//I print the length of the original strings and the new strings
printf("length string 1 = %d length string 2 = %d\n", strlen(string1), strlen(string2));
printf("%s\n%s\n", string11, string22);
system("pause");
return 0;
}
#包括
#包括
#包括
int main(){
//这里我创建了两个大小为100的字符串
字符string1[100],string2[100];
//在这里,我要求用户键入两个短语,并使用gets存储它们
printf(“键入两个短语):\n”);
获取(string1);
获取(string2);
//在这里,我创建了两个新字符串,其大小由strlen(stringi)+1给出
字符串11[strlen(string1)];
char string22[strlen(string2)];
//对于字符串1,我将原始字符串的所有值分配给新字符串,直到“\0”
对于(int i=0;string1[i]!='\0';i++)
{
string11[i]=string1[i];
}
//这里我用终止符表示新字符串的最后一个位置
string11[strlen(string1)]='\0';
//我对字符串2也这样做
对于(int i=0;string2[i]!='\0';i++)
{
string22[i]=string2[i];
}
string22[strlen(string2)]='\0';
//我打印原始字符串和新字符串的长度
printf(“长度字符串1=%d长度字符串2=%d\n”、strlen(string1)、strlen(string2));
printf(“%s\n%s\n”,string11,string22);
系统(“暂停”);
返回0;
}
祝你好运。你把字符串终止符写错了位置,一个接一个。它应该是
string11[strlen(string1)]='\0'代码>那么问题是什么?我没有阅读完整的问题,但基本上您希望按照字符串的原始长度存储字符串。好好使用。你把字符串终止符写错了位置,一个接一个。它应该是string11[strlen(string1)]='\0'代码>那么问题是什么?我没有阅读完整的问题,但基本上您希望按照字符串的原始长度存储字符串。很好用。非常感谢,它起作用了!但老实说,我不明白它的逻辑。如果strlen返回“\0”之前的组件数,那么我将使用strlen(原始字符串)+1个组件创建一个新字符串。但是为什么在复制时,我要将属性“\0”复制到strlen'th组件,而不是组件