我试图用sprintf将int转换为char。
for(int i=0; i<n; i++){
char buffer[100];
load = group[i];
int num = pow(10, (load-1));
for(int j=(load-2); j>=0; j--){
num+=pow(10, j);
}
sprintf(buffer,"%d",num);
(...)当我打印buffer时,一切看起来都很好,因为我只希望它是一个字符串。然后,我想把它存储在一个数组中。具体如下:
typedef struct Unario {
char * bits ;
} Unario ;但是,当试图将buffer存储在数组的下一个索引中时,之前保存的所有其他变量都会更新为新的buffer定义。
以下是完整的功能:
Unario * comprimir_en_unario ( int n, int * grupo ){
int load;
int j = 0;
int SIZE = n*2;
Unario * comprimiendo = malloc(SIZE * sizeof(comprimiendo));
for(int i=0; i<n; i++){
char buffer[100];
load = grupo[i];
printf("\ngrupo[%d] = %d\n", i, load);
int num = pow(10, (load-1));
for(int j=(load-2); j>=0; j--){
num+=pow(10, j);
}
sprintf(buffer,"%d",num);
comprimiendo[j].bits = buffer;
j++;
comprimiendo[j].bits = "0";
j++;
}
for(int i=0; i<SIZE; i++){
printf("in %d = %s\n", i, comprimiendo[i].bits);
}
return comprimiendo;
};通过以下输入:
int m[6] = {8,2,8,8,2,3};以下是不想要的产出:
in 0 = 111
in 1 = 0
in 2 = 111
in 3 = 0
in 4 = 111
in 5 = 0
in 6 = 111
in 7 = 0
in 8 = 111
in 9 = 0
in 10 = 111
in 11 = 0我想要得到的是:
in 0 = 11111111
in 1 = 0
in 2 = 11
in 3 = 0
in 4 = 11111111
in 5 = 0
in 6 = 11111111
in 7 = 0
in 8 = 11
in 9 = 0
in 10 = 111
in 11 = 0附带注意:我不能更改或删除结构,因为它是一组结构的一部分。
发布于 2022-04-30 04:12:04
因为您的结构中的位不能存储值,所以它只是一个指针。
所以你必须确保每次你把你的搅拌器藏在什么地方
在您使用的函数中,每次使用sprintf时,都会刷新缓冲区中存储的值。
在这种情况下,您的最终输出必须是缓冲区的最新值。
这意味着,如果将数组从{ 8,2,8,8,2,3 }更改为{ 8,2,8,8,2,4 },则最终输出将全部以1111(缓冲区的最新值)为单位。
下面是保存它的一种方法,我使用2d数组来存储字符串
Unario * comprimir_en_unario(int n, int * grupo)
{
int load;
int j = 0;
int SIZE = n * 2;
Unario * comprimiendo = (Unario *)malloc(SIZE * sizeof(Unario));//No need to change.
char buffer[100][100];//Use 2d array to store the string each time
for (int i = 0; i < n; i++)
{
load = grupo[i];
printf("grupo[%d] = %d\n", i, load);
int num = pow(10, (load - 1));
for (int j = (load - 2); j >= 0; j--)
{
num += pow(10, j);
}
sprintf(&buffer[i][0], "%d", num);//Related changes
comprimiendo[j].bits = &buffer[i][0];//Related changes
j++;
comprimiendo[j].bits = "0";
j++;
}
for (int i = 0; i < SIZE; i++)
{
printf("in %d = %s\n", i, comprimiendo[i].bits);
}
return comprimiendo;
}当您注意到原始函数的问题后,您可能会找到更多的解决方案。
https://stackoverflow.com/questions/72065052
复制相似问题