簡體   English   中英

strncat():目標字符串中的隨機字符

[英]strncat(): Random character in target string

考慮以下程序:

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

int main() {

    int ret = 0;

    char dirname[] = "test/";
    int path_maxlen = 256;
    char path[path_maxlen];
    int filename_maxlen = path_maxlen - strlen(dirname);

    strncat(path, dirname, path_maxlen - 1);

    strncat(path, "file.txt", filename_maxlen);

    FILE *file = fopen(path, "r");

    printf("path: %s\n", path);

    if (file != NULL) {
        printf("success\n");

        fclose(file);
    } else {
        printf("fail\n");
        ret = 1;
    }

    return ret;
}

這似乎起初是可行的,但隨后開始失敗,即,盡管該文件存在並且無法對程序或文件進行任何更改,但無法將其打開。

那時我添加了打印出path的行。 將輸出重定向到文件后,結果證明該path前面帶有一個隨機字符(ASCII:1 SOH'heading of heading')。 因此,我假設在這里未正確使用strncat ,並且一些隨機垃圾被寫入了我的路徑數組。

如何正確連接以上示例中的字符串?

PS:我的操作系統是Ubuntu 16.04。 編譯器為:

$ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
strncat(path, dirname, path_maxlen - 1);

path未初始化,因此它是未定義的行為。

嘗試

char path[path_maxlen];
path[0] = 0; // since path is VLA, usual "={0}" initialization does not work 

或者,您可以考慮只使用strcpy_s

暫無
暫無

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

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