use*_*417 1 c string pointers loops for-loop
嘿伙计们,我在for循环中发生了一件非常奇怪的事情.
当我在这里执行此代码时:
#include <stdio.h>
#include <string.h>
char* repeat(char c, int n);
int main(void)
{
char* input;
input = repeat('c', 12);
return 0;
}
char* repeat(char c, int n)
{
char* out;
for (int i = 0; i < 12; ++i) //FIX ITERATION
{
int len = strlen(out);
out[len] = c;
out[len+1] = '\0';
}
printf("%s\n", out);
return out;
}
Run Code Online (Sandbox Code Playgroud)
我得到了预期的输出:
cccccccccccc
Run Code Online (Sandbox Code Playgroud)
但是当我在我的方法中使用传递的int时,像这样:
char* repeat(char c, int n)
{
char* out;
for (int i = 0; i < n; ++i) //VARIABLE ITERATION
{
int len = strlen(out);
out[len] = c;
out[len+1] = '\0';
}
printf("%s\n", out);
return out;
}
Run Code Online (Sandbox Code Playgroud)
我只是得到这个输出:
cccc
Run Code Online (Sandbox Code Playgroud)
请告诉我我做错了什么.我不知道错误是什么?
谢谢你的帮助!
这条线就是问题所在
int len = strlen(out);
out[len] = c;
out[len+1] = '\0';
Run Code Online (Sandbox Code Playgroud)
out
未初始化.您没有在此声明中分配内存:
char* out;
Run Code Online (Sandbox Code Playgroud)
所以你遇到了未定义的行为.
第3.4.3节
1未定义的行为
使用不可移植或错误的程序结构或错误数据时的行为,本国际标准不对此要求
第4.1节:
可以将非函数非数组类型T的左值(3.10)转换为右值.如果T是不完整类型,则需要进行此转换的程序格式不正确.如果左值引用的对象不是类型T的对象,并且不是从T派生的类型的对象,或者如果对象未初始化,则需要此转换的程序具有未定义的行为.如果T是非类型,则rvalue的类型是T的非限定版本.否则,rvalue的类型是T.
在两个示例中,您都显示结果未定义.
你必须分配内存:
char * out = malloc(sizeof(char)*50); // i have used size 50 - take sufficient what you need
//initialize it
out[0] = '\0';
Run Code Online (Sandbox Code Playgroud)
一定要包括stdlib.h
.
out
现在指向一个可以容纳50 char
秒的内存块.