[英]C string concatenation
我試圖在C中輸入2個字符串,並輸出第3個字符串,該字符串由字符串1和2串聯而成。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
*
*/
int main(int argc, char** argv) {
char stringarray1 [30];
char stringarray2 [30];
char stringarray3 [30];
int length;
printf("Please enter some text less than 30 characters long\n");
scanf("%[a-z, ]", &stringarray1);
printf("Please enter some text less than 30 characters long\n");
scanf("%[a-z, ]", &stringarray2);
strcat(stringarray1, stringarray2);
//length = strlen(stringarray);
printf("The combined string is %s\n", stringarray1);
return (EXIT_SUCCESS);
}
它允許我輸入第一個字符串,但隨后輸出第二個和第三個printf語句,而不允許我輸入第二個字符串。
如何在不退出的情況下輸入第二個字符串? 為什么退出?
看一下scanf
的文檔:您的格式字符串"%[az, ]"
似乎與您的想法無關。 只需對字符串使用"%s"
。 (它沒有任何字符檢查)。
您不應將&放在已經是指針的數組中。
scanf("%[a-z, ]", stringarray2);
猜測一下,我想您會在scanf規范字符串中需要一個\\n
。 您可能還應該問%s
而不是%[az, ]
。 您擁有單個字符的方式將匹配,然后在按下第二個scanf時,將匹配下一個字符。
還有一些安全問題。 您可能應該檢查以確保兩個字符串的總和不超過30個字符。 正如Benoit所指出的那樣,C中的數組還兼用作指向第一個字符的指針,因此在將它們傳遞給C IO例程時,不要在它們上使用地址運算符( &
)。 這將為例程提供數組指針本身的地址,然后IO例程將輕松地將其與字符數據一起擦除。 不好!
您知道chararray和stringarray之間的區別嗎? 我想不是。 另外,您必須為結果字符串分配足夠的空間,例如:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
*
*/
int main(int argc, char** argv) {
char chararray1 [31];
char chararray2 [16];
char chararray3 [30];
int length;
printf("Please enter some text less than 15 characters long\n");
scanf("%15[a-z, ]", stringarray1);
printf("Please enter some text less than 15 characters long\n");
scanf("%15[a-z, ]", stringarray2);
strcat(stringarray1, stringarray2);
//length = strlen(stringarray);
printf("The combined string is %s\n", stringarray1);
return (EXIT_SUCCESS);
}
我建議使用fgets而不是scanf,您可以指定最大長度(緩沖區目標大小-1)並避免出現意外情況。
目標緩沖區也應該是輸入緩沖區大小的兩倍,否則您將面臨內存覆蓋的風險
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.