簡體   English   中英

如何在C中將char轉換為字符串?

[英]How to cast char to string in C?

我是C語言新手,使用strcat()時遇到問題。 我查了一下strcat,發現它以字符串作為參數,但是當我從char數組中拆分項目時,是一個char,當我將其用作strcat的參數時,它會打印出錯誤。

#include <stdio.h>
#include <string.h>
int main()
{   
char a[10]="abcdefg123";
char *pa=a;
char *out[2]={"",""};
int counter=0;
while(*pa != '\0'){
    if (counter%2==0){
        strcat(out[0],*pa);
    }
    else{
    strcat(out[1],*pa);
    }

    counter++;
    pa++;    
   } 
printf("%s,%s\n",out[0],out[1]);

return 0;
}

該代碼的目的是將一個字符串拆分為兩個字符串,每個字符串包含所有位於奇數位置或偶數位置的字符。但是,當我試圖取消對char指針的引用時,我得到的只是一個Char,但似乎我需要一個字符串

strcat使用臨時字符串,而不是strcat(out[0],*pa);

另外,請確保為out分配了足夠的內存。

int main()
{   
   char a[10]="abcdefg123";
   char temp[2] = {0};
   char *pa=a;

   // This is not good for `strcat`.
   // char *out[2]={"",""};

   // Use this instead.
   char out[2][20]={"",""};

   int counter=0;
   while(*pa != '\0'){
      temp[0] = *pa;
      if (counter%2==0){
         strcat(out[0], temp);
      }
      else{
         strcat(out[1], temp);
      }

      counter++;
      pa++;    
   } 
   printf("%s,%s\n",out[0],out[1]);

   return 0;
}

點1.按照strcat()手冊頁

.. dest字符串必須有足夠的空間用於結果。

strcat()的第二個參數是const char * ,因此調用不能為strcat(out[0],*pa); 您需要為此使用一個臨時數組,該臨時數組將僅保留值*pa 否則,您可以像這樣使用strncat()

 strncat(out[0], pa, 1);  // copy only 1 char

在以后的情況下,您不需要任何臨時數組。

參考:再次在手冊頁中,

strncat()函數與之類似,不同之處在於它將最多使用src n個字節,並且如果src包含n或更多字節,則不需要以空值結尾。

strcat()需要一個以null終止的字符串的指針。 您正在取消引用給出字符的指針(使用*運算符)。 您不能簡單地將char轉換為指向sting的指針。 您可能希望使用memcpy()而不是strcat(),但是對於復制單個字節,可以在左側和右側使用*運算符進行簡單分配。 但是正如其他人指出的那樣,您的代碼並沒有為復制char分配空間,因此您將需要進行其他更改來解決此問題。 另外,您還必須記住將最終的空字節復制到兩個輸出字符串的末尾。

在C語言中,“字符串”實際上只是指向字符的指針。 字符串從該字符開始到終止的0字節( NUL )。

如果取消引用字符串指針,則會在該位置獲得字符。 如果指針指向字符串的開頭,則將獲得字符串的第一個字符。

您的程序有一些問題。 首先,您需要為新字符串分配空間。 strcat()會嘗試將字符復制到任何地方,但這是您的工作,以確保在那里有空間並且可以在那兒書寫。 out的聲明只是聲明了兩個指針,並將它們初始化為指向長度為零的常量字符串。 相反,您需要分配存儲空間,例如:

char out0[64], out1[64];
char *out[]={out0, out1};

這使得每64個字符兩個輸出緩沖器,然后建立out與指向它們的指針。

另一個問題:您為char數組聲明了10的長度,但是隨后使用length-10字符串對其進行了初始化。 這意味着沒有空間可用於終止NUL字節,C不會放一個。 然后strcpy()strcat()將從字符串中復制多余的垃圾,直到碰巧有一個NUL字節為止。 如果幸運的話,馬上就會有一個錯誤,並且不會發現錯誤,但是如果不幸運的話,您將得到奇怪的垃圾。

只需讓編譯器計算您的字符串中有多少字節,然后做正確的事即可。 省略長度:

char a[]="abcdefg123";

暫無
暫無

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

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