私は配列で作業しています。文字列配列と関数と他のビットを文字列とints配列で打ちました。strcpy with strings array
は今、私は私がやったことstrcpy
、との問題を抱えていると知りたい:
- それは私が
strcpy(temp, str1[i]);
ながらtemp
がchar *temp
で割り当てた場合にクラッシュします。 単一文字列
temp[100]
。しかし、私は配列の文字列要素にtemp
のサイズを計算する方法を理解していませんでした。私はtemp
のサイズとして17を与えなければならないことを理解しましたので、文字列配列からバイトを合わせてください。 のように:char *temp[17];
strcpy(temp, str1[i]);
ここで*str1[] = {"sweepsweepsweepsweep"}
20文字です。そして、サイズが16でクラッシュします。stings配列のメンバーを別のメンバーに割り当てることはできません。 しかし、私はそれを行う一つのコードを見た。
私は他の空の文字列配列
str2
&str3
を宣言した場合、彼らはstr1
と同じ値を持っている理由であるもう一つは?これは、コード例の最後に含まれています。
これは私のコードです:
#include <stdio.h>
#include <string.h>
#include <stdint.h>
int main()
{
int m = 0, j = 1, n, i;
char *str1[] = {"sweep", "forward"}, *str2[] = {}, *str3[] = {}, *temp;
uint8_t cnt = sizeof(str1)/sizeof(str1[0]);
if (strcmp(str1[m], str1[j]) > 0) {
strcpy(temp, str1[m]);
strcpy(str1[m], str1[j]);
strcpy(str1[j], temp);
printf("OK\n");
} else {
printf("NOPE\n");
}
printf("The sorted string\n");
for (i = 0; i < cnt; i++)
puts(str1[i]);
printf("%d\n", strcmp(str1[0], str1[1]));
printf("-----------------\n");
printf("temp: %s\n", temp);
printf("str2: %s\n", str2[0]);
printf("str3: %s\n", str3[0]);
return 0;
}
コード例オンラインから:
#include<stdio.h>
int main(){
int i,j,n;
char str[20][20],temp[20];
puts("Enter the no. of string to be sorted");
scanf("%d",&n);
for(i=0;i<=n;i++)
gets(str[i]);
for(i=0;i<=n;i++)
for(j=i+1;j<=n;j++)
{
if(strcmp(str[i],str[j])>0)
{
strcpy(temp,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],temp);
}
}
printf("The sorted string\n");
for(i=0;i<=n;i++)
puts(str[i]);
return 0;
}
どこでも「temp」は初期化されていません。あなたはどこでも指していないポインタを読み書きするだけではいけません。 – Michael
同じものが 'i'になります。これは最初に初期化しないでインデックスとして使用しようとします。 – Michael
_「あなたが私たちに正確なコードを提示しない限り、私はそれをする1つのコードを見ました。 – Michael