【发布时间】:2019-02-04 21:39:50
【问题描述】:
如何以原始形式备份字符串?我正在使用 strncpy() 但是,当我尝试打印句子时,原始文本被改变了。 下面是一个例子:如果我输入“This is a sample text”来获取并要求打印句子,控制台会打印“TTTTs is a ample ttxt”。有人可以告诉如何制作,以便 sentenceBackup 变量具有备份并且句子正确显示为输入。
//String variable to contain the user input.
char sentence[] = "";
char sentenceBackup[] ="";
//this variable tracks the size of the user input.
int sentenceLength;
//ask the user forsinput
printf("Enter a free formed sentence that needs to be sorted: \n");
//accept the user entry into sentence.
//scanf is deprecated since C11.
gets(sentence);
// keep a backup for further operation.
strncpy(sentenceBackup, sentence, findLength(sentence));
//display the sentence entered.
printf("The sentence is : %s\n", sentence);
Ps:如果我去掉strncpy()方法,源文本,即句子变量会正确显示。
【问题讨论】:
-
当您在 C 中声明一个数组而不指定数组大小时,C 假定它的大小与其初始值设定项相同。在你的情况下,1
charlong。试着给你的数组声明一个大的尺寸,比如[2048];否则写入sentenceBackup的第二个字符可能会覆盖sentence的第一个字符。将数组想象成在内存中相邻并且只有 1 个字符长,每个...strncpy写入的第二个字符在哪里? -
char sentence[] = ""太小,无法接收来自gets(sentence);的输入 -
顺便说一句,你的问题没有minimal reproducible example。它应该有一个完整的程序。这是改善您的问题的另一个原因
标签: c string pointers c-strings strcpy