繁体   English   中英

C编程-Sprintf和字符串数组

[英]C Programming - Sprintf & String Arrays

我一直在阅读有关字符串数组的其他一些问题。 我得出了一些见解并更改了代码,但是我遇到的一个问题是合并sprintf。

高层而言,其目的最终将是打开/读取目录中数量可变的文件的功能。 但是挂断了这个字符串操作部分。

我想在sprintf中增加指针,但是遇到了分割问题。 关于解决我所拥有的东西或其他路线的想法? 最大= 20,文件= 4。

char fName_A[MAX];
char fName_B[MAX];
char * ptr_A[FILES];
char * ptr_B[FILES];
int i;

for(i=0; i<FILES; i++){
    sprintf(fName_A, "waveA00%d.bin", i);
    sprintf(fName_B, "waveB00%d.bin", i);

    ptr_A[i] = fName_A;
    ptr_B[i] = fName_B;

    printf("Ch1 File Number %d is named %s\n", i, *(ptr_A+i));
    printf("Ch2 File Number %d is named %s\n", i, *(ptr_B+i));
}

printf("fName_A[0] = %s\n", *ptr_A);
printf("fName_A[1] = %s\n", *(ptr_A + 1));
printf("fName_A[2] = %s\n", *(ptr_A + 2));
printf("fName_A[3] = %s\n", *(ptr_A + 3));

return 0;

您没有为与Ptr_A和Ptr_B关联的字符串分配任何内存,只是将指针设置为指向缓冲区fName_A和fName_B,所以当您在末尾检查时,它们都指向存储在这些缓冲区中的最后一个字符串。

通过为A和B中的每个文件名分配存储为char数组,而不是使用指针来解决此问题。 这是一个例子:

#include <stdio.h>
#include <string.h>

#define MAX   100
#define FILES 4

int main(int argc, char** argv)
{
 char fName_A[MAX];
 char fName_B[MAX];
 char A[FILES][MAX];
 char B[FILES][MAX];
 int i;

 for(i=0; i<FILES; i++){
    sprintf(fName_A, "waveA00%d.bin", i);
    sprintf(fName_B, "waveB00%d.bin", i);

    strcpy(A[i], fName_A);
    strcpy(B[i], fName_B);

    printf("Ch1 File Number %d is named %s\n", i, A[i]);
    printf("Ch2 File Number %d is named %s\n", i, B[i]);
 }

 for(i=0; i<FILES; i++) {
    printf("A[%d] = %s\n", i, A[i]);
    printf("B[%d] = %s\n", i, B[i]);
 }
}

这将输出以下内容:

Ch1 File Number 0 is named waveA000.bin
Ch2 File Number 0 is named waveB000.bin
Ch1 File Number 1 is named waveA001.bin
Ch2 File Number 1 is named waveB001.bin
Ch1 File Number 2 is named waveA002.bin
Ch2 File Number 2 is named waveB002.bin
Ch1 File Number 3 is named waveA003.bin
Ch2 File Number 3 is named waveB003.bin
A[0] = waveA000.bin
B[0] = waveB000.bin
A[1] = waveA001.bin
B[1] = waveB001.bin
A[2] = waveA002.bin
B[2] = waveB002.bin
A[3] = waveA003.bin
B[3] = waveB003.bin

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM