簡體   English   中英

如何將一定長度的字符串轉換為c中的2d數組

[英]how to get certain length string into 2d array in c

我正在嘗試制作一個接受字符串的函數(例如:“你好,我在stackoverflow上”)並以給定的寬度打印出所述字符串。 所以如果說寬度10

你好,我是

在stackov上

`void Left(char* words, int width)
{
    int length = strlen(words);
    int divisions = length / width; //How many lines there will be
    if (divisions%length!=0) divisions+=1; //If some spillover
    printf("%d = divisions \n", divisions);
    char output[divisions][width];
    int i;
    int temp;
    for(i=0; i < divisions; i++)
    {
        strncpy(output[i][temp], words, width);
        output[i][width] = '\0';
        temp+= width;
    }
}`

這是我到目前為止編寫的功能。 因此,輸出將具有與新行一樣多的行,每行具有與寬度所給定的文本一樣多的文本。 我認為我使用的是strncpy錯誤,但不確定。 有什么幫助嗎?

您正在朝正確的方向前進,但是首先需要注意一些事項:

char output[divisions][width];

是一個字符串數組,其中包含“分區”個字符字符串,每個字符字符串的大小均為“寬度”。 並且strncpy將'char *'作為目標緩沖區的參數。 http://man7.org/linux/man-pages/man3/strcpy.3.html

因此,要復制您的情況下的數據,您需要提供目標字符串,如下所示:

strncpy(&output[i], words, width);

這會將數據的“寬度”長度從字符串“ words”復制到字符串“ output [i]”。

現在,要使函數起作用,您必須在每次迭代之后將“ words”指針向前移動。 例如:前10個字節-“你好,我是”從'words'復制到'output [0]',因此您需要在下一次迭代中從第11個字節開始處理,因此只需添加

words += width;
printf("%s \n", output[i]); 

另外,如前一個答案所述,請不要忘記字符串終止符和其他邊界條件。

字符串的寬度不包括字符串終止符,因此output[i][width] = '\\0'; 將終止符寫出來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM