我知道如何编写Java,现在我正在尝试学习C编程。
我想从我创建的String
Array
中写出char
,并在一行中写出每个String(我正在创建一个控制台应用程序)
到目前为止,我已经得到了这个;
int main()
{
int i;
int j;
char aarhus[] = {'\x8F','r','h','u','s',' ','H','\0'};
char esbjerg[] = {'E','s','b','j','e','r','g','\0'};
char stationer[] = {*aarhus,*esbjerg};
for (j=0;stationer[j] != '\0';j++) {
printf("%c\n", stationer[j]);
}
return 0;
}
包含在顶部当然。
但是当我启动程序时,它只会写ÅEEsbjerg而不是ÅrhusEsbjerg(两者都在一条线上,就像我想要的那样)。如果我在\0
中添加stationer[]
,我得到的就是ÅE在同一行。我一直试图解决这个问题几个小时,但到目前为止还没有。我希望你能提供帮助。提前致谢
答案 0 :(得分:1)
你可能正在寻找这样的东西:
int main()
{
int j;
char aarhus[] = {'\x8F', 'r', 'h', 'u', 's', ' ', 'H', '\0'};
char esbjerg[] = {'E', 's', 'b', 'j', 'e', 'r', 'g', '\0'};
char* stationer[] = {aarhus, esbjerg, 0};
for(j = 0; stationer[j] != 0; j++)
{
printf("%s", stationer[j]);
}
}
或者这个:
int main()
{
int j;
char aarhus[] = {'\x8F', 'r', 'h', 'u', 's', ' ', 'H', '\0'};
char esbjerg[] = {'E', 's', 'b', 'j', 'e', 'r', 'g', '\0'};
char* stationer[] = {aarhus, esbjerg};
int count = sizeof(stationer) / sizeof(char*);
for(j = 0; j < count; j++)
{
printf("%s", stationer[j]);
}
}
答案 1 :(得分:1)
更改
char *stationer[] = {aarhus,esbjerg};
并使用
printf("%s", stationer[j]);
答案 2 :(得分:1)
您的代码存在很多问题。
C中的数组未终止。您的循环for (j=0;stationer[j] != '\0';j++) {
似乎假设stationer
包含字符'\ 0',但您的定义不包含它。
其次,您的程序目前只打印stationer
中包含的两个字符。您看到esbjerg
数组的更多字符的事实是未定义行为的示例 - 您已经超过了数组的末尾,因此您正在阅读(和打印)垃圾。
此外,您还没有在printf格式中包含换行符'\n'
字符。 printf
不会像println
那样自动执行此操作。
所以,总结一下:
int main()
{
char aarhus[] = {'\x8F','r','h','u','s',' ','H','\0'};
char esbjerg[] = {'E','s','b','j','e','r','g','\0'};
/* An array of pointers to char. */
char *stationer[] = {aarhus, esbjerg, NULL};
int index = 0;
/* Print each array of character as a string "%s": */
for (index = 0 ; stationer[index] != NULL; ++index) {
printf("%s", stationer[index]);
}
return 0;
}
最后但并非最不重要的是,如果您的语言环境支持,printf
将正确处理'Å'。
答案 3 :(得分:0)
这应该有效:
printf("%s", aarhus);
printf("%s", esbjerg);
因为你没有添加\n
,所以它们应该打印在同一行。
关于你的提前终止,我认为stationer
的初始化是有原因的。
你应该尝试这样的事情(你想仔细检查考虑\0
,\n
等的尺寸:
// Allocate a new string
unsigned char * stationer = malloc(sizeof(aarhus)+sizeof(esbjerg) -1); // -1 for the extra \0
// Copy your 1st string
memcpy(stationer, aarhus, sizeof(aarhus));
// Append the second
memcpy(stationer + sizeof(aarhus), esbjerg, sizeof(esbjerg));
// print it
printf("%s", stationer);