【C言語】”文字列”とは
【単なるchar *】。
【符号無しchar *】ではなく
【符号付きchar *】でもない

文字型は 単なるchar

warning: pointer targets in passing argument 1 of ‘strcpy’ differ in signedness

警告: ‘strcpy’ の第一引数は符号が異なる
[-Wpointer-sign]


■型が違うと警告される例

#include    <string.h>
typedef unsigned char   UB ;
struct  ctsk {
    //外部インタフェースで決まっている
    UB dsname[8];
} x ;
void    f(UB   *dsname)
{    
    strcpy(x.dsname,dsname);//型が違うと怒られる
}
int main(void)
{
    f("dsname");//型が違うと怒られる
}

文字列の型はchar *型ですが
符号無しのchar *型(UB*型)で引数を
受け渡しているため型が違うと
コンパイラに怒られます。

■✖ コンパイラが黙るまでキャスト

void    f(UB   *dsname)
{    
    strcpy((char *)x.dsname,(char *)dsname);//キャスト
}
int main(void)
{
    f((UB *)"dsname");//キャスト
}

非推奨です。

■○ 型を見直し必要最低限のキャスト

void    f(char *dsname)//型の見直し
{   
    strcpy((char *)x.dsname,dsname);//必要最低限のキャスト
}
int main(void)
{
    f("dsname");
}

型を見直し素直にchar *を使う。

外部インタフェースの制限で変更できない場合は、
必要最低限のキャストをする。


参考:

STR04-C. 基本文字集合にある文字を表すには単なる char を使用する

https://www.jpcert.or.jp/sc-rules/c-str04-c.html