打印疑惑
#include <stdio.h>#include <string.h>
int main()
{
char str;
strncat(str, "I love FishC.com!", sizeof(str));
printf("str=%s",str);
return 0;
}
首先,我知道sizeof(str)太短,但是为什么我输出的是str='I love Fis sizeof(str) 的值是 10
也就是
strncat(str, "I love FishC.com!", 10);
就是复制 10 个字符
I love Fis
10 个字符,有问题吗? 另一个问题
char str;
strncat(str, "I love FishC.com!", sizeof(str));
这里的 str 没有初始化,你就直接 strncat 是有问题的
因为 str 中的内容是随机的
可能你会说这个程序你运行的没有问题呀
的确
这个代码我这边也没问题,但是你能解释下面这个代码为什么输出了 2 次而不是 10 次吗?
不管怎么运行,都是输出 2 次,而且输出的内容也不对
$ cat main.c
#include <stdio.h>
#include <string.h>
int main()
{
for(size_t i = 0; i < 10; ++i) {
char str;
strncat(str, "I love FishC.com!", sizeof(str));
printf("str=%s\n",str);
}
return 0;
}
$ gcc -g -Wall -o main main.c
$ ./main
str=I love Fis
str=I love FisI love Fis
$ ./main
str=I love Fis
str=I love FisI love Fis
$ ./main
str=I love Fis
str=I love FisI love Fis
$ ./main
str=I love Fis
str=I love FisI love Fis
$ ./main
str=I love Fis
str=I love FisI love Fis
$ ./main
str=I love Fis
str=I love FisI love Fis
$ ./main
str=I love Fis
str=I love FisI love Fis
$
这样就初始化了 str
char str = "";
但是这个程序死循环了,因为 str 只有 10 个字节的空间,你只能复制 9 个,但是你复制了 10 个
$ cat main.c
#include <stdio.h>
#include <string.h>
int main()
{
for(size_t i = 0; i < 10; ++i) {
char str = "";
strncat(str, "I love FishC.com!", sizeof(str));
printf("str=%s\n",str);
}
return 0;
}
$ gcc -g -Wall -o main main.c
$ ./main
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
str=I love Fis
这样就可以了
$ cat main.c
#include <stdio.h>
#include <string.h>
int main()
{
for(size_t i = 0; i < 10; ++i) {
char str = "";
strncat(str, "I love FishC.com!", sizeof(str) - 1);
printf("str=%s\n",str);
}
return 0;
}
$ gcc -g -Wall -o main main.c
$ ./main
str=I love Fi
str=I love Fi
str=I love Fi
str=I love Fi
str=I love Fi
str=I love Fi
str=I love Fi
str=I love Fi
str=I love Fi
str=I love Fi
$
人造人 发表于 2021-7-13 11:57
这样就可以了
为什么开头会打印出一个'呀{:10_254:} boat7 发表于 2021-7-13 13:47
为什么开头会打印出一个'呀
因为你的 str 没有初始化,里面的内容是什么都是有可能的
开头打印出一个 ' 就是因为 str 里面存储的是 '
那就在 ' 后面添加 I love FishC.com! 人造人 发表于 2021-7-13 13:59
因为你的 str 没有初始化,里面的内容是什么都是有可能的
开头打印出一个 ' 就是因为 str 里面存储的是...
不好意思,没看全,谢谢了 其实我更喜欢这样写。
#include <stdio.h>
#include <string.h>
#define __CONTENT__ "I love FishC.com!"
int main()
{
char str = { 0 };
strncat(str, __CONTENT__, sizeof(str));
printf("str = %s",str);
return 0;
} 活動小丑 发表于 2021-7-13 14:18
其实我更喜欢这样写。
我这样写好像也没啥区别的样子 活動小丑 发表于 2021-7-13 14:18
其实我更喜欢这样写。
我那个是带你学c带你飞第19课的课后作业,你写得挺好 boat7 发表于 2021-7-13 14:56
我那个是带你学c带你飞第19课的课后作业,你写得挺好
还行吧。
页:
[1]